У меня есть приложение, которое после уведомления ContentObserver
об изменении на ContentProvider
пытается запросить поставщика в фоновом потоке. Это вызывает выброс SecurityException
:
8-10 15:54:29.577 3057-3200/com.xxxx.mobile.android.xxx W/Binder﹕ Caught a RuntimeException from the binder stub implementation. java.lang.SecurityException: Permission Denial: reading com.xxx.mobile.android.mdk.model.customer.ContentProvider uri content://com.xxx.mobile.android.consumer.xxx/vehicle from pid=0, uid=1000 requires the provider be exported, or grantUriPermission() at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:539) at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:452) at android.content.ContentProvider$Transport.query(ContentProvider.java:205) at android.content.ContentResolver.query(ContentResolver.java:478) at android.content.ContentResolver.query(ContentResolver.java:422)
Как бы поток, созданный приложением в конечном итоге с другим UID из приложения ContentProvider?
Поместив контрольную точку исключения в android.content.ContentProvider
, я вижу, что UserHandle.isSameApp(uid, mMyUid)
- false
и UserHandle.isSameUser(uid, mMyUid)
- true
. Я также вижу, что UID провайдеров составляет 10087.