我在一个愚蠢的问题上被困了几个小时。
我的应用程序由 2 个活动组成:A(主)和 B。还有一个服务 S。“正常”任务堆栈是 AB,S 在后台运行。
当我想通过通知直接到达活动 B 时,就会出现我的问题。我必须构造任务堆栈以获取 AB 以保持返回按钮的默认行为。(我希望用户可以回到 A)。
因为我使用了 API 7,所以我不能使用 android 开发者教程http://developer.android.com/guide/topics/ui/notifiers/notifications.html中所示的意图数组。所以我决定在通知发送的意图中添加一个自定义操作(S.ACTION_CUSTOM),以便在活动 A 的 onCreate() 中区分这种情况。
与服务 S 中声明的通知相关联的意图:
Intent notificationIntent = new Intent(this, A.class);
notificationIntent.setAction(ACTION_CUSTOM);
现在在 A 中,在 onCreate() 方法的末尾,我添加:
if (S.ACTION_CUSTOM.equals(getIntent().getAction())) {
Intent intent = new Intent(this, B.class);
intent.setAction(S.ACTION_CUSTOM);
startActivity(intent);
}
此代码用于从通知直接转到 B 并授权返回 A。但是一旦我使用了通知“快捷方式”,则在应用程序启动时直接到达 B,即使是从主菜单也是如此。我已经尝试了很多事情来了解会发生什么,但即使我在 A 中的 if 语句末尾添加 getIntent().setAction(ANYTHING),行为也是一样的。
谁能告诉我我的代码发生了什么?Morover 我对另一种实现愿望的方法持开放态度。
谢谢。
编辑:
XML清单的一部分:
<activity
android:name=".A"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".B"
android:label="@string/app_name" >
</activity>
但我认为意图过滤器与我的问题无关。