尝试添加第二个主屏幕小部件后,PendingIntents 不会触发
Posted
技术标签:
【中文标题】尝试添加第二个主屏幕小部件后,PendingIntents 不会触发【英文标题】:PendingIntents won't fire after attempting to add 2nd Home screen widget 【发布时间】:2012-07-11 18:23:11 【问题描述】:我有一个widget
,它设置了多个pendingIntents
。只要我在主屏幕上只有一个小部件,一切都可以在小部件上正常工作。
暂时我决定将用户限制为仅使用我的一个主屏幕小部件。如果一个已经在使用,ConfigureActivity
给用户一个警告对话框,告诉他们他们不能添加第二个,然后设置setResult(RESULT_CANCELED, null)
,然后完成()。
这很好用,让用户无法设置任何进一步的主屏幕小部件,但对于已经存在的大部分 pendingIntents
不会触发。 Logcat 告诉我“无法发送待处理的意图:”
每个 pendingIntents 都设置为启动一个用于更新小部件的服务。如果我删除小部件并重新设置它,它会再次正常工作,直到我尝试添加第二个小部件。在这一点上对我来说有点莫名其妙。任何人都知道为什么开始添加第二个小部件但未完成它会取消我之前的pendingIntents?
如果重要,使用FLAG_CANCEL_CURRENT
设置的pendingIntents。
这是用于设置我的intent
和pendingIntents
的代码。
Intent intentDialog = new Intent(getBaseContext(), ScheduleActionsActivity.class);
intentDialog.putExtra("Action", ACTION_ENTER_SCHEDULE);
intentDialog.setAction("abc.hwRowOne");
intentDialog.putExtra("scheduleId", sch.getId());
intentDialog.putExtra("scheduleDescription", sch.getDescription());
PendingIntent pendingIntentDialog1 = PendingIntent.getActivity(getBaseContext(), 0, intentDialog, PendingIntent.FLAG_CANCEL_CURRENT);
views.setOnClickPendingIntent(R.id.hwRowOne, pendingIntentDialog1);
intentDialog.setAction()
更改为对于小部件的每一行都是唯一的行,所以我认为这也使我的 pendingIntent 也是唯一的。
我昨晚在发布我的问题后看到了这个答案,但我不确定它为什么/如何工作,我不确定将它放在我所在地区的哪个位置。它似乎为每个意图设置了一个唯一的数据,但这就是我认为我的.setAction()
正在做的事情。 Multiple Instances Of Widget Only Updating Last widget
所以要回答你的问题,不,我根本没有在我的意图中使用 appWidgetId,我只需要将它作为 putExtra()
传递,然后在 intentDialog
上传递?
【问题讨论】:
您是否正确使用了 WidgetID 来指示 PendingIntent 哪个小部件需要更新?每当您有多个小部件要从服务中对其进行更新时,您都需要将正确的小部件 ID 传递给它。 【参考方案1】:这个问题的答案解决了我的问题: Multiple Instances Of Widget Only Updating Last widget
我不知道为什么添加 setData(uri)
有效,但它确实让我现在可以在主屏幕上拥有多个小部件,并且 pendingIntents
是独一无二的,并且可以按我的预期触发。
为了安全起见,我还将appWidgetId
添加到intent
,如果我决定在每台设备上允许多个小部件,以后可能需要它。
【讨论】:
以上是关于尝试添加第二个主屏幕小部件后,PendingIntents 不会触发的主要内容,如果未能解决你的问题,请参考以下文章