尝试添加第二个主屏幕小部件后,PendingIntents不会触发

时间:2012-07-12 02:56:34

标签: android android-widget android-pendingintent

我有widget设置了一些pendingIntents。只要我在主屏幕上只有一个小部件,一切都在小部件上正常工作。

暂时我决定将用户限制为只有一个主屏幕小部件。如果已经使用了ConfigureActivity ,则会向用户提供一个alertDialog框,告诉他们无法添加第二个,然后设置setResult(RESULT_CANCELED, null)然后完成()。< / p>

这很好用,并且让用户无法设置任何其他主屏幕小部件,但对于已经存在的小部件,我的pendingIntents大多数都不会触发。 Logcat告诉我“无法发送待处理的意图:”

每个pendingIntents都设置为启动用于更新窗口小部件的服务。如果我删除小部件并重置它,它再次正常工作,直到我尝试添加第二个小部件。在这一点上,我有点莫名其妙。任何人都有任何想法,为什么开始添加第二个小部件但没有完成它会取消我以前的pendingIntents?

重要的是,pendingIntents设置为FLAG_CANCEL_CURRENT

以下是用于设置intentpendingIntents的代码。

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吗?

1 个答案:

答案 0 :(得分:0)

这个问题的答案解决了我的问题: Multiple Instances Of Widget Only Updating Last widget

我不知道为什么添加setData(uri)有效,但它确实允许我在主屏幕上拥有多个小部件,pendingIntents是唯一的,并按照我的预期进行激活。 / p>

在安全方面,我还将appWidgetId添加到intent,如果我决定每个设备允许多个小部件,则可能需要它。