我有两个(或更多)小部件,例如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不仅仅是额外的
答案 0 :(得分:2)
看起来我需要了解我的活动生命周期事件。答案是以下代码放入我的活动:
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
super.onNewIntent(intent);
}
问题在于,在主页按钮按下时,活动保留在启动它的原始Intent
上。然后,当另一个小部件启动Activity时,原始意图被重用。上面的代码只是用新的代码替换原始的意图,并继续进行剩余的生命周期事件。