我有一个简单的用例。我的活动开放如下:
A > B > C
现在,我收到推送通知。
我在GCMIntentService
课程中执行以下操作:
在onMessage
,
Intent notificationIntent = new Intent(context, A.class);
PendingIntent contentIntent =
PendingIntent.getActivity(context,0, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
notification.setContentIntent(contentIntent);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP );
我的期望是应该从B, C
移除Activity stack
个活动,然后您应该重定向到活动A
。
然而,正在发生的事情是A
被打开;但是当你按回按钮时我会按顺序再次获得C, B, A
!!
我做错了什么?
以下是我尝试过的事情:
我已经尝试过了
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
,
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP, Intent.FLAG_ACTIVITY_SINGLE_TOP);
我保留了对最后一个前景活动的静态引用,并将其作为context
传递。
似乎没什么用。
答案 0 :(得分:2)
试试这个。它可能会帮助你。一旦你测试过它,请告诉我。
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(notificationIntent);
答案 1 :(得分:1)
试试 Tutorial
Intent notificationIntent = new Intent(context, YourActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
答案 2 :(得分:0)
将您的活动的启动模式设置为“singleTask”:
<activity
android:name=".ActivityA"
android:launchMode="singleTask"
>
并设置如下标志:
Intent intent= new Intent(currentActivity, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);