Android - 点按通知应用时该怎么办,该应用已经打开

时间:2015-06-25 13:26:50

标签: android push-notification

我在我的应用中收到了通知,当我点按通知时,我希望这样:

  • 如果应用程序已打开:不执行任何操作;
  • 如果应用已关闭:请打开应用;

当前代码:

Intent intent = new Intent();
intent.setClass(mContext, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, intent,
    PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext);
mBuilder.setSmallIcon(icon);
mBuilder.setContentTitle(string);
mBuilder.setWhen(System.currentTimeMillis());
mBuilder.setOngoing(true);
mBuilder.setContentIntent(contentIntent);
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
mBuilder.setColor(mContext.getResources().getColor(R.color.theme_color));

Notification notification = mBuilder.build();
mNotificationMgr.notify(id, notification);

活动清单:

<activity
    android:name=".MainActivity"
    android:configChanges="keyboardHidden|orientation|mcc|mnc"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:label="@string/app_name"
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

如果我点按通知并且该应用已经打开,它会在自己的应用前打开另一个应用! 如果应用程序已关闭,一切正常!

2 个答案:

答案 0 :(得分:0)

这可以通过在manifest.xml中为您的活动添加launchMode来完成,例如

<activity android:launchMode = "singleTop"  ../>

以下是详细信息example

答案 1 :(得分:0)

我会替换这一行:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

以下内容:

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

来自文档:

  

public static final int FLAG_ACTIVITY_SINGLE_TOP

     

如果设置,如果活动已经在历史堆栈的顶部运行,则不会启动该活动。

  

public static final int FLAG_ACTIVITY_REORDER_TO_FRONT

     

如果在传递给Context.startActivity()的Intent中设置,则此标志将为   导致已启动的活动被带到其任务的前端   历史堆栈如果已经在运行。

     

例如,考虑一项由四项活动组成的任务:A,B,C,   D.如果D调用具有解析为的Intent的startActivity()   活动B的组成部分,然后B将被带到前面   历史堆栈,使用此结果顺序:A,C,D,B。此标志将   如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则忽略它。

SINGLET_TOP会阻止您的活动再次启动,REORDER_TO_FRONT会阻止重新启动它。希望它有所帮助。