我在尝试在内容提供商中执行查询时,会收到一些有关异常的报告。这些报告主要来自使用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)