主页按键后启动的PendingIntent不正确

时间:2011-11-01 10:42:04

标签: android android-pendingintent

我有两个(或更多)小部件,例如A和B,应该启动相同的活动,将appWidgetId额外内容中的Intent传递给活动。在从任何窗口小部件首次启动时应用程序安装后,此工作正常(活动接收到正确的appWidgetId)。如果我在活动启动后按下后退按钮并从其他小部件启动活动,它也可以正常工作。但是,如果我从小部件A启动活动,点击主页按钮,然后从小部件B(或C或D ...)启动活动,它将以A的appWidgetId启动。我很困惑如何解决这个问题。以下是我宣布PendingIntent

的方法
Intent intent = new Intent(context, WidgetActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setAction(this.getClass().getName() + System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 
                                         PendingIntent.FLAG_UPDATE_CURRENT);

如果我理解正确,我会为每个小部件成功设置唯一的PendingIntents。任何帮助最受赞赏!

修改this question接受的答案表明:

  

我认为问题在于你的PendingIntent只有额外的差别。 PendingIntents被缓存,因此如果您使用具有相同操作和数据的两个,它们将相互覆盖。

但是,我的代码会创建随机操作,所以我认为我的PendingIntents不仅仅是额外的

1 个答案:

答案 0 :(得分:2)

看起来我需要了解我的活动生命周期事件。答案是以下代码放入我的活动:

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    super.onNewIntent(intent);
}

问题在于,在主页按钮按下时,活动保留在启动它的原始Intent上。然后,当另一个小部件启动Activity时,原始意图被重用。上面的代码只是用新的代码替换原始的意图,并继续进行剩余的生命周期事件。