android - 尝试将数据发送到应用程序小部件

标签 android widget android-intent

我正在开发一个小部件,当用户点击它时,它会更改显示的数据。这通常很容易处理,但我的应用小部件提供商正在处理具有不同数据集的多个小部件实例。话虽如此,当用户点击小部件时,将启动调用 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/

相关文章:

通配符上的 Android 主机 Intent 过滤器

android - 如何为具有各种 fragment 的 Kotlin Android 应用程序创建带协程的单例计时器?

android - 手机重启后小部件的按钮不起作用

javascript - 在小部件 api 中读取 Soundcloud 方法

interface - 连线 : visualizing a directed graph with nodes that can contain nested graphs

android - 如果多个应用程序包含相同的 Service 类作为外部依赖项,则将使用 AIDL 返回哪个服务

android - 如何使用Intent在Kotlin中放置数据类列表

Android模拟器实际屏幕尺寸

安卓/MySQL : Prevent to next activity if current activity is empty

java - 处理 AndroidStudio 中的重复条目 : java. util.zip.ZipException