意图使用FLAG_ACTIVITY_CLEAR_TOP不清除顶级活动

时间:2014-10-04 11:34:42

标签: android

情景:

  1. 我从活动A导航 - > B.
  2. 我下拉通知抽屉并点击有意启动活动A的通知。
  3. 我想要的是什么:

    1. 活动B关闭,显示父A。
    2. 我点击后退按钮退出应用程序。
    3. 实际发生的事情:

      显示了活动A的新实例。 如果我点击后退,A关闭,旧B出现。 我必须再次点击返回#3和#4

      我在通知的动作意图中使用了意图标志FLAG_ACTIVITY_CLEAR_TOP。我还尝试了FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK。我已将这两个活动设置为SingleTop launchMode。

      我做错了什么?为什么即使我使用旗帜,B(顶部)也不会被清除。

      活动A和B的显示:

      <activity
              android:name=".A"
              android:launchMode="singleTop">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      
      <activity
          android:name=".B"
          android:parentActivityName=".A" 
          android:launchMode="singleTop">
          <meta-data
              android:name="android.support.PARENT_ACTIVITY"
              android:value=".A" />
          <intent-filter>
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
      </activity>
      

      显示通知的服务:

      Intent contentIntent = new Intent(this,A.class);
      contentIntent.setAction(MYACTION);
      contentIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
      PendingIntent contentPendingIntent = PendingIntent.getActivity(this, notificationId, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT);
      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(MyApplication.getContext())
          .setContentTitle("text")
          .setContentText("text")
          .setSmallIcon(R.drawable.icon)
          .setContentIntent(contentPendingIntent);    
      
      NotificationManager notificationManager = (NotificationManager) MyApplication.getContext().getSystemService(Context.NOTIFICATION_SERVICE);
                      notificationManager.notify(notificationId,notificationBuilder.build());
      

      [编辑2014年10月15日]:现在按预期工作,完全没有任何改变。即使我删除了标志和singletop启动模式,它仍然有效。我不知道为什么。这很奇怪。

2 个答案:

答案 0 :(得分:0)

在您的A活动中

添加此代码段

@Override
public void onBackPressed() {
 super.onBackPressed();
}

如果它不适合你,我会给出另一个解决方案

答案 1 :(得分:0)

使用set flag尝试它,如下所示 -

Intent contentIntent = new Intent(this,A.class);
contentIntent.setAction(MYACTION);
contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
contentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);