2

发布时间:2009 年 11 月 30 日星期一下午 5:08 发布主题:Intent Extras 的简单问题

我正在为主屏幕开发一个应用小部件。我正在努力做到这一点,因此当用户点击小部件时,它会更改小部件中显示的数据。但是,我还允许使用不同数据打开多个小部件实例。因此,为了告诉我的方法要更新哪个小部件,我在启动的意图中添加了一个额外的内容以更改数据。

这是我的意图:Java:

Intent changeData = new Intent("com.tonycosentini.mintdroid.CHANGE_DATA"); 
changeData.putExtra("widget_id", currentWidgetId); 
PendingIntent changeDataPendingIntent = PendingIntent.getBroadcast(this, 0, changeData, 0); 
//This will return the correct value, but if I call it in my onreceive() method it won't.
Log.v(TAG, "stored id is: " + changeData.getIntExtra("widget", 0);

这正确地存储了小部件 id,但是当调用更改数据方法时,从意图中读取的小部件 id 是第一个小部件实例。也就是说,有一个生成所有小部件的 for 循环,无论您点击什么小部件,收到的小部件 id 始终是第一个小部件中的第一个小部件 id。

任何人都知道如何解决这个问题?希望我没有说得太糟糕。

感谢阅读,托尼

4

1 回答 1

1

这是 PendingIntents 的一个已知问题;当 Android 比较 PendingIntents 时,它不会比较 Intent extras,因此您不能多次安排相同的基本 Intent 只使用不同的 extras。目前,您只能通过以某种方式使 Intent 唯一来解决这个问题,而不是额外的,例如向 Intent 数据添加额外的信息。

Google Android Group 对此进行了一些讨论:http ://groups.google.com/group/android-developers/browse_thread/thread/81100da6ddb21136

于 2009-12-01T18:21:42.477 回答