通过 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 权限的主要内容,如果未能解决你的问题,请参考以下文章
java是通过值传递,也就是通过拷贝传递——通过方法操作不同类型的变量加深理解