2016-01-12 9 views
5

La seguente riga di codiceIllegalArgumentException in grantUriPermission il livello di API 19

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

solleva questa eccezione quando in esecuzione su dispositivi con livello di API 19 (KitKat), ma non nelle versioni successive:

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) 

Perchè è così?

+1

Controllare anche questo [Come persistere autorizzazione API Android 19] (http://stackoverflow.com/questions/25414352/how-to-persist-permission-in- android-api-19-kitkat) –

risposta

2

Credo che questo sia causato da una modifica aggiunta in KitKat che dovrebbe avere un accesso al contenuto fisso ma l'hanno rotto.

Si avrebbe bisogno di eseguire un controllo utilizzando Build.VERSION.SDK_INT < 19 (vale a dire. 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

Dov'è 'Utils.isKitkat()'? – fiddler

+0

Il mio errore è un'utilità locale è solo Build.VERSION.SDK_INT> = 19 –