我在我的应用中收到了通知,当我点按通知时,我希望这样:
当前代码:
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>
如果我点按通知并且该应用已经打开,它会在自己的应用前打开另一个应用! 如果应用程序已关闭,一切正常!
答案 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会阻止重新启动它。希望它有所帮助。