In einer meiner Anwendungen verwende ich einen ContentProvider, um Informationen zu speichern und wiederherzustellen. Dieser ContentProvider wird von der Hauptanwendung sowie von einigen Diensten verwendet, aber alle befinden sich in derselben apk und alle Dienste werden im Standard (Haupt) -Prozess ausgeführt.Erlangung einer Zugriffsverweigerung bei der Abfrage meines eigenen ContentProvider über meine eigene App
ist mein Content-Provider wie dies in meinem Manifest erklärt:
<provider android:name="sample.provider.SampleProvider"
android:authorities="sample.provider"
android:exported="false"
android:enabled="true">
</provider>
Eine meiner Klassen wird als Beobachter an einer URI registriert, und wenn eine Änderung mitgeteilt wird, ich bin an den Anbieter direkt abfragt Aktualisiere den internen Wert.
@Override
public void onChange(boolean selfChange, @Nullable Uri uri) {
if (uri == null) {
return;
}
try {
Cursor updated = mContentResolver.query(uri, null, null, null, null);
// ... working with the cursor here
} catch (Exception e) {
e.printStackTrace();
}
}
Dieser Code immer Failes, mit folgenden Ausnahme
java.lang.SecurityException: Permission Denial: reading sample.provider.SampleProvider uri
content://sample.provider/infos/FOO from pid=0, uid=1000 requires the provider be
exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480)
at android.content.ContentProvider$Transport.query(ContentProvider.java:211)
at android.content.ContentResolver.query(ContentResolver.java:491)
at android.content.ContentResolver.query(ContentResolver.java:434)
at sample.foo.Bar.onChange(Bar.java:331)
at android.database.ContentObserver.onChange(ContentObserver.java:145)
at android.database.ContentObserver.dispatchChange(ContentObserver.java:196)
at android.database.ContentObserver.-wrap0(ContentObserver.java)
at android.database.ContentObserver$Transport.onChange(ContentObserver.java:231)
at android.database.IContentObserver$Stub.onTransact(IContentObserver.java:62)
at android.os.Binder.execTransact(Binder.java:453)
Beachten Sie, dass, wenn ich exported="true"
im Manifest verwenden, alles
Ihr Ziel api erkennen? –
target = 23, minsdk = 16 – XGouchet