0

我有一个应用程序,我在其中使用 launchMode="singleTask" 保存所有活动。我更喜欢做标志汤(混合组合以获得所需的效果),并基于接收 onNewIntent 调用。

但是我有以下问题。

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

然后我启动活动 S。

(1)如果我按下主页按钮并将应用程序置于后台,然后按下历史按钮(Nexus 4 上最右边的按钮,我认为它是这样调用的)我将在我按下主页按钮后离开的状态相同。

(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) 中选择就是我想要的行为。

4

2 回答 2

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

应该有效。

于 2013-10-15T14:26:34.067 回答
0

您应该android:launchMode="singleTop在 AndoridManifest.xml 中添加活动声明标签。

 <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>
于 2015-09-17T10:02:05.823 回答