我正在开发一个小部件,当用户点击它时,它会改变它显示的数据。这通常很容易处理,但我的app小部件提供程序正在处理具有不同数据集的多个小部件实例。话虽如此,当用户点击窗口小部件时,会启动一个调用changeData()方法的PendingIntent。在启动的intent中,我存储了widget ID,因此changeData()知道要使用哪个数据集。起初我将小部件ID存储在intent的附加内容中,但我发现Android小部件如何处理小部件意图附加内容存在一个错误,所以现在我试图通过使用setData()方法传递URL来存储小部件(格式化)喜欢内容:widgetId IE内容: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文件中是否需要设置正确的工作,或者我做错了什么?
感谢您抽出宝贵时间阅读本文, 贝
答案 0 :(得分: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匹配且过滤器同样未指定类型时才传递测试。只有像mailto:和tel:这样的URI不会引用实际数据。