java.lang.SecurityException:Permission Denial:reading(...)Provider uri

时间:2014-08-12 20:05:22

标签: android android-service android-contentprovider

我在尝试在内容提供商中执行查询时,会收到一些有关异常的报告。这些报告主要来自使用Android 2.3的用户(目前我在Android 4.x中没有此问题的报告)。

内容提供程序是完全私有的,它不会被导出,只会在声明它的应用程序中使用,所以我真的不明白为什么会发生这种SecurityException。

我的提供者在标记内声明如下:

    <provider
        android:authorities="com.some.authority"
        android:exported="false"
        android:name="com.myapp.provider" />

这是导致异常的查询(已修改为与上面的提供程序匹配):

ContentResolver cr = getContentResolver();
cr.query("content://com.some.authority/something", null, null, null, null);

我试图搜索这个问题,但我找不到像我这样的另一个案例。我还检查了与内容提供商相关的文档,但我仍然不知道为什么会发生这种异常。

我希望有人能对这个问题有所了解。

非常感谢你!

PS。忘记说查询是在属于与内容提供者相同的应用程序的服务中执行的,但该服务在单独的进程中运行。无论如何,我在另一个应用程序中也有关于同一问题的报告,在这种情况下,查询是在主进程中执行的,所以我并不认为执行查询的过程很重要。


编辑:

这是完整的堆栈跟踪:

java.lang.SecurityException: Permission Denial: reading com.myapp.provider uri content://com.some.authority/something from pid=16201, uid=10139 requires null
   at android.os.Parcel.readException(Parcel.java:1322)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
   at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
   at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
   at android.content.ContentResolver.query(ContentResolver.java:262)
   at com.myapp.services.CustomService.onHandleIntent //-> THIS IS WHERE THE QUERY IS EXECUTED
   at com.myapp.services.BackgroundService$ServiceHandler.handleMessage
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:130)
   at android.os.HandlerThread.run(HandlerThread.java:60)

0 个答案:

没有答案
相关问题