我有一个应用程序,该应用程序发出通知,当您选择该选项时将启动 Activity 。根据Android文档,我可以使用NavUtils.shouldUpRecreateTask来检查该 Activity 是直接启动(即从通知中启动)还是通过正常的 Activity 堆栈启动。但是,它给出了错误的答案。我正在JellyBean上对此进行测试,但使用的是支持库。

基本上,即使 Activity 已经从通知中启动,shouldUpRecreateTask始终始终返回false。

为什么不应该提供正确答案的任何想法?

最佳答案

这是不对的!
从通知开始时,您必须在构建通知时创建堆栈,如此处所述:http://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse

因此,在创建通知时,您必须执行以下操作:

Intent resultIntent = new Intent(this, ResultActivity.class);
// ResultActivity is the activity you'll land on, of course
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent to the top of the stack
// make sure that in the manifest ResultActivity has parent specified!!!
stackBuilder.addNextIntent(resultIntent);
// Gets a PendingIntent containing the entire back stack
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

然后,当您单击“向上”按钮时,您需要常规代码,即:
if (NavUtils.shouldUpRecreateTask(this, intent)) {
    // This activity is NOT part of this app's task, so
    // create a new task when navigating up, with a
    // synthesized back stack.
    TaskStackBuilder.create(this)
    // Add all of this activity's parents to the back stack
            .addNextIntentWithParentStack(intent)
            // Navigate up to the closest parent
            .startActivities();
} else {
    NavUtils.navigateUpTo(this, intent);
}

这对我来说非常有效。

关于android - NavUtils.shouldUpRecreateTask在JellyBean上失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14089867/

10-11 03:44