2

我正在开发一个小部件,该小部件将在用户点击它时更改它显示的数据。这通常很容易处理,但我的应用小部件提供程序正在处理具有不同数据集的多个小部件实例。话虽如此,当用户点击小部件时,会启动一个调用 changeData() 方法的 PendingIntent。在启动的意图内部是我存储小部件 ID 的地方,因此 changeData() 知道要使用哪个数据集。起初我将小部件 ID 存储在意图的附加内容中,但我发现 Android 小部件如何处理小部件意图附加内容存在一个错误,所以现在我尝试通过使用 setData() 方法传递 URL 来存储小部件(格式化如 content:widgetId IE content:24 等)。

这就是我为 PendingIntent 设置数据的方式:

Intent changeData = new Intent("com.tonycosentini.mintdroid.CHANGE_DATA");
changeData.setData(Uri.parse("content:" + currentWidgetId));
PendingIntent changeDataPendingIntent = PendingIntent.getBroadcast(this, 0, changeData, 0);

但是,一旦我尝试对此进行测试,通常在点击小部件时调用的 onRecieve() 方法就不再被调用。我需要在我的 Android 清单文件中设置什么才能正常工作,还是我做错了什么?

感谢您花时间阅读本文,托尼

4

1 回答 1

1

你需要匹配

<data android:scheme="content" />

或者

IntentFilter filter = new IntentFilter("com.tonycosentini.mintdroid.CHANGE_DATA");
filter.addDataScheme("content");

在您的意图过滤器中。

取决于您是否在 xml 或 java 中声明过滤器。

http://developer.android.com/guide/topics/intents/intents-filters.html

包含 URI 但没有数据类型(并且无法从 URI 推断出类型)的 Intent 对象只有在其 URI 与过滤器中的 URI 匹配并且过滤器同样未指定类型时才能通过测试。这只适用于不引用实际数据的 URI,例如 mailto: 和 tel:。

于 2009-12-21T08:54:37.820 回答