我正在开发一个小部件,当用户点击它时,它会更改显示的数据。这通常很容易处理,但我的应用小部件提供商正在处理具有不同数据集的多个小部件实例。话虽如此,当用户点击小部件时,将启动调用 changeData() 方法的 PendingIntent。在启动的 Intent 中,我存储了小部件 ID,因此 changeData() 知道要使用哪个数据集。起初我将小部件 ID 存储在 Intent 的额外内容中,但我发现 Android 小部件处理小部件 Intent 额外内容的方式存在错误,所以现在我试图通过使用 setData() 方法传递 URL 来存储小部件(格式化如 content:widgetId I.E. 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 Manifest 文件中设置一些内容才能正常工作,还是我做错了什么?
感谢您花时间阅读本文, 托尼
最佳答案
你需要匹配
<data android:scheme="content" />
或
IntentFilter filter = new IntentFilter("com.tonycosentini.mintdroid.CHANGE_DATA");
filter.addDataScheme("content");
在您的 Intent 过滤器中。
取决于您是在 xml 还是 java 中声明过滤器。
http://developer.android.com/guide/topics/intents/intents-filters.html
仅当其 URI 与过滤器中的 URI 匹配且过滤器同样未指定类型时,包含 URI 但不包含数据类型(并且无法从 URI 推断类型)的 Intent 对象才能通过测试。这仅适用于不引用实际数据的 URI,例如 mailto: 和 tel:。
关于android - 尝试将数据发送到应用程序小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938238/