Ich habe eine App, die, wenn durch eine ContentObserver
einer Änderung an eine ContentProvider
gemeldet, versucht, den Anbieter auf einem Hintergrund Thread abzufragen. Dies bewirkt, dass ein SecurityException
geworfen werden:Wie würde ein von einer App erstellter Thread als eine andere App als der ContentProvider der App angesehen?
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)
Wie würde ein Faden durch eine App mit einer anderen UID aus der Contentprovider App am Ende erstellt?
eine Ausnahme Haltepunkt in android.content.ContentProvider
Indem ich sehe, dass UserHandle.isSameApp(uid, mMyUid)
ist false
und UserHandle.isSameUser(uid, mMyUid)
true
ist. Ich sehe auch, dass die Provider-UID 10087 ist.
Fragen Sie nach uid = 1000 - das ist die Benutzer-ID des Android-Systems. Es ist wahrscheinlich, dass die Anforderung intern an das System zur Verarbeitung weitergeleitet wird. – adelphus
@adelphus Ja. Ich dachte, das sei der Grund für die Sicherheitsausnahme, aber jetzt bin ich mir nicht sicher, weil 'UserHandle.isSameUser'' true' zurückgibt. –
Android-Benutzer sind nicht mit App-uid-Werten verbunden. Verwechsle sie nicht! App UID-Werte werden verwendet, um Sandboxing zwischen Apps zu erzwingen, Benutzersicherheit wird anders implementiert. – adelphus