我有widget
设置了一些pendingIntents
。只要我在主屏幕上只有一个小部件,一切都在小部件上正常工作。
暂时我决定将用户限制为只有一个主屏幕小部件。如果已经使用了ConfigureActivity
,则会向用户提供一个alertDialog框,告诉他们无法添加第二个,然后设置setResult(RESULT_CANCELED, null)
然后完成()。< / p>
这很好用,并且让用户无法设置任何其他主屏幕小部件,但对于已经存在的小部件,我的pendingIntents
大多数都不会触发。 Logcat告诉我“无法发送待处理的意图:”
每个pendingIntents都设置为启动用于更新窗口小部件的服务。如果我删除小部件并重置它,它再次正常工作,直到我尝试添加第二个小部件。在这一点上,我有点莫名其妙。任何人都有任何想法,为什么开始添加第二个小部件但没有完成它会取消我以前的pendingIntents?
重要的是,pendingIntents设置为FLAG_CANCEL_CURRENT
。
以下是用于设置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
吗?
答案 0 :(得分:0)
这个问题的答案解决了我的问题: Multiple Instances Of Widget Only Updating Last widget
我不知道为什么添加setData(uri)
有效,但它确实允许我在主屏幕上拥有多个小部件,pendingIntents
是唯一的,并按照我的预期进行激活。 / p>
在安全方面,我还将appWidgetId
添加到intent
,如果我决定每个设备允许多个小部件,则可能需要它。