通过 android.widget.RemoteViewsService 访问时的 Content Provider 权限

Posted

技术标签:

【中文标题】通过 android.widget.RemoteViewsService 访问时的 Content Provider 权限【英文标题】:Content Provider permission when accessing via android.widget.RemoteViewsService 【发布时间】:2011-08-28 20:31:53 【问题描述】:

我正在开发一个应用程序的小部件,作为更大应用程序的一部分。 该应用程序包含一个 ContentProvider,它在 manifest.xml 中声明如下:

<provider android:name="aaa.bbb.providers.MyContentProvider"
    android:authorities="aaa.bbb.myprovider"
    android:enabled="true" 
    android:exported="false">
</provider>

如您所见,内容提供程序的导出属性设置为 false,因为我不希望 其他应用程序来访问它(根据谷歌的开发人员指南..)。 问题是这个属性会导致小部件在尝试获取数据时崩溃 来自内容提供者,尽管它从相同的进程运行(小部件使用使用 android.widget.RemoteViewsService 的 StackView)我得到:

java.lang.SecurityException: Permission Denial: reading aaa.bbb.providers.MyContentProvider uri content://aaa.bbb.myprovider/users from pid=203, uid=10022 requires null

现在据我所知,当缺少权限时会发生这种错误,但它说 那个权限null是必须的,没有我们都知道的那个权限……

谢谢!

【问题讨论】:

【参考方案1】:

看到这个Android: java.lang.SecurityException: Permission Denial: start Intent

【讨论】:

我阅读了它,但没有找到任何可以帮助我的东西。我的问题不涉及活动,而只涉及小部件和内容提供者。 好的,我想我知道问题出在哪里,但我没有解决办法。在我的RemoteViewsService 中有一个RemoteViewsFactory 类,我将覆盖onDataSetChanged() 方法并对内容提供者执行查询。出于某种原因,只有在通过onDataSetChanged() 方法查询内容提供者时,才会出现异常(我再次检查了该方法运行的进程是什么,与内容提供者的进程相同)。

以上是关于通过 android.widget.RemoteViewsService 访问时的 Content Provider 权限的主要内容,如果未能解决你的问题,请参考以下文章

下拉框多选框单选框 通过TagHelper绑定数据

酶:测试孩子通过安装渲染失败,但通过浅时通过

java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解

通过代码进行 Spring 配置与通过注释进行配置

如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?

通过邮递员通过 API 使用 Rails 主动存储上传文件(.pdf、.jpg 等)? (不通过 Rails 视图)