来自通知的Android恢复活动堆栈与历史记录选择完全相同

时间:2013-10-15 11:36:57

标签: android notifications android-pendingintent

我有一个应用程序,我将所有活动都保存在launchMode =“singleTask”中。我更喜欢做旗帜汤(混合组合以获得所需效果),并基于接收onNewIntent调用。

但是我有以下问题。

如果我启动应用程序,则启动R活动(具有启动器,名册活动)。

然后我发起活动S.

(1)如果我按下主页按钮并将应用程序放到后台,然后我按下历史记录按钮(Nexus 4上最直接的按钮,我认为它就像这样调用)我将会看到S在我按下主页按钮后我离开它的同一状态的活动。

(2)但是,如果我按下主页按钮并将应用程序置于后台,然后单击通知以启动我的应用程序,则启动R活动并为其调用onNewIntent。

基本上我也想在第二种情况下采用相同的行为。我在点击通知时启动这样的应用程序:

   Intent rosterIntent = new Intent(this, RosterActivity.class);
   rosterIntent.addCategory(Intent.CATEGORY_DEFAULT);
   rosterIntent.setAction(Intent.ACTION_MAIN);
   PendingIntent pendingIntent = PendingIntent.getActivity(this, 2,
   rosterIntent, 0);

这似乎足以在我离开它的相同状态下重新启动应用程序,但它不起作用。也许我的所有活动都是单一的,这是相关的......

有人可以告诉我,如果我需要在我的意图中添加更多标志,或者是为了获得我想要的东西的未决意图吗?

此致

注意:在应用程序处于后台后单击启动器图标似乎与(2)具有相同的行为,因此只从历史记录(1)中选择是我想要的行为。

2 个答案:

答案 0 :(得分:0)

我使用支持库中的 NotificationCompat 。我想你需要添加这些标志:

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);

和建设者:

builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));

应该有效。

答案 1 :(得分:0)

您应该在AndoridManifest.xml中将android:launchMode="singleTop添加到您的活动声明代码中。

 <activity
        android:name="co.ramansoft.lyricsplayer.MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>