2016-01-12 4 views
5

Die folgende CodezeileIllegal in grantUriPermission auf API-Ebene 19

context.getApplicationContext().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 

hebt diese Ausnahme, wenn sie auf Geräten mit API-Ebene 19 (KitKat) ausgeführt wird, aber nicht auf spätere Versionen:

java.lang.IllegalArgumentException: Requested flags 0x40, but only 0x3 are allowed 
    at android.os.Parcel.readException(Parcel.java:1476) 
    at android.os.Parcel.readException(Parcel.java:1426) 
    at android.app.ActivityManagerProxy.grantUriPermission(ActivityManagerNative.java:3461) 
    at android.app.ContextImpl.grantUriPermission(ContextImpl.java:1732) 
    at android.content.ContextWrapper.grantUriPermission(ContextWrapper.java:577) 

Warum ist das so?

+1

Überprüfen Sie auch diese [Wie Erlaubnis in Android API bestehen bleiben 19] (http://stackoverflow.com/questions/25414352/how-to-persist-permission-in- android-api-19-kitkat) –

Antwort

2

Ich glaube, dass dies durch eine Änderung in KitKat verursacht wurde, die festen Inhaltszugriff haben sollte, aber sie brach es.

Sie benötigen würde einen Scheck mit Build.VERSION.SDK_INT < 19 (dh. Pre-KitKat)

if(Build.VERSION.SDK_INT < 19) { 
    context.getApplicationContext().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); 
} else { 
    takePersistableUriPermission(packageName, uri); 
} 

http://developer.android.com/reference/android/content/ContentResolver.html#takePersistableUriPermission

+0

Wo ist 'Utils.isKitkat()'? – fiddler

+0

Mein Fehler, der ein lokales Dienstprogramm ist, ist nur Build.VERSION.SDK_INT> = 19 –