1

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

目前我决定将用户限制在我的主屏幕小部件之一。如果一个已经在使用中,则ConfigureActivity 给用户一个警告对话框,告诉他们不能添加第二个,然后设置setResult(RESULT_CANCELED, null),然后完成()。

这工作得很好,并且使用户无法设置任何其他主屏幕小部件,但对于已经到位的大部分我pendingIntents不会触发的小部件。Logcat 告诉我“无法发送待处理的意图:”

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

以防万一,pendingIntents 设置为FLAG_CANCEL_CURRENT.

这是用于设置 my intentand的代码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()正在做的事情。小部件的多个实例仅更新最后一个小部件

所以要回答你的问题,不,我根本没有在我的意图中使用 appWidgetId,我只需要将它作为putExtra()then传递intentDialog吗?

4

1 回答 1

0

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

我不知道为什么要添加这些setData(uri)作品,但它确实让我现在可以在主屏幕上拥有多个小部件,并且它们pendingIntents是独一无二的,并且正如我所期望的那样触发它们。

为了安全起见,如果我决定在每个设备上允许多个小部件,我也会将其添加appWidgetId到稍后可能需要它。intent

于 2012-07-12T14:09:48.750 回答