FLAG_ACTIVITY_CLEAR_TOP无法通知通知部分

时间:2014-07-09 11:50:08

标签: android android-intent android-activity android-notifications android-notification-bar

我有一个简单的用例。我的活动开放如下: 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 !!

我做错了什么?

以下是我尝试过的事情:

  1. 我已经尝试过了 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP, Intent.FLAG_ACTIVITY_SINGLE_TOP);

  2. 我保留了对最后一个前景活动的静态引用,并将其作为context传递。

  3. 似乎没什么用。

3 个答案:

答案 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);