我有一个应用程序,我将所有活动都保存在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)中选择是我想要的行为。
答案 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>