Android onReceive将始终接收最后一个appWidgetId,即使按下了不同的实例小部件

Android onReceive将始终接收最后一个appWidgetId,即使按下了不同的实例小部件,android,Android,我有以下代码。我试图在我的主屏幕中放置2个小部件实例 这是在放置了2个小部件实例之后正在打印的日志 onUpdate START onUpdate 170 onUpdate START onUpdate 171 当我点击第一个小部件,然后点击第二个小部件时,我希望分别打印170和171。然而,这是我得到的 onReceive 171 <-- I'm expecting 170 to be printed. onReceive 171 onReceive 171这是因为您的两个Pend

我有以下代码。我试图在我的主屏幕中放置2个小部件实例

这是在放置了2个小部件实例之后正在打印的日志

onUpdate START
onUpdate 170
onUpdate START
onUpdate 171
当我点击第一个小部件,然后点击第二个小部件时,我希望分别打印170和171。然而,这是我得到的

onReceive 171  <-- I'm expecting 170 to be printed.
onReceive 171

onReceive 171这是因为您的两个PendingEvent被视为相同的,因此创建第二个将替换第一个,请参阅:

确定出于意图的目的,两个意图是否相同 分辨率(过滤)。也就是说,如果他们的动作、数据、类型、类, 和类别是一样的。这不会比较任何额外数据 包含在意图中

所以你的只是额外的不同,这不起作用。试着用setData设置一些东西

refreshIntent.setData(Uri.parse(refreshIntent.toUri(Intent.URI_INTENT_SCHEME)));

这是因为您的两个Pending帐篷被视为相同的,因此创建第二个将替换第一个,请参阅:

确定出于意图的目的,两个意图是否相同 分辨率(过滤)。也就是说,如果他们的动作、数据、类型、类, 和类别是一样的。这不会比较任何额外数据 包含在意图中

所以你的只是额外的不同,这不起作用。试着用setData设置一些东西

refreshIntent.setData(Uri.parse(refreshIntent.toUri(Intent.URI_INTENT_SCHEME)));

工作起来很有魅力。谢谢那么PendingEvent.getBroadcast(context,appWidgetId,intent,0)呢。每个小部件的请求代码都不一样,是否也可以正常工作?还是这是一种不好的做法?@Phuah Yee Keat我有一个类似的警报和悬挂式帐篷的使用案例,可以激发和控制火灾。它向BroadcastReceiver发送消息,然后BroadcastReceiver向服务发送消息以发出通知。我使用了您的setData示例,但通知未触发。我是否需要在清单中的BroadcastReceiver的意图过滤器中添加元素?解释Uri方案?工作起来很有魅力。谢谢那么PendingEvent.getBroadcast(context,appWidgetId,intent,0)呢。每个小部件的请求代码都不一样,是否也可以正常工作?还是这是一种不好的做法?@Phuah Yee Keat我有一个类似的警报和悬挂式帐篷的使用案例,可以激发和控制火灾。它向BroadcastReceiver发送消息,然后BroadcastReceiver向服务发送消息以发出通知。我使用了您的setData示例,但通知未触发。我是否需要在清单中的BroadcastReceiver的意图过滤器中添加元素?要解释Uri方案?