2016-01-12 14 views
5

Ta linia koduIllegalArgumentException w grantUriPermission na poziomie API 19

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

podnosi tego wyjątku podczas pracy w urządzeniach z poziomu API 19 (KitKat), ale nie na późniejsze wersje:

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) 

Dlaczego to jest takie?

+1

także sprawdzić to [Jak utrzymywać pozwolenie w Android API 19] (http://stackoverflow.com/questions/25414352/how-to-persist-permission-in- android-api-19-kitkat) –

Odpowiedz

2

Uważam, że jest to spowodowane zmianą dodaną w KitKat, która powinna mieć stały dostęp do treści, ale ją zepsuł.

Trzeba by uruchomić sprawdzanie za pomocą Build.VERSION.SDK_INT < 19 (tj. 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

Gdzie jest 'Utils.isKitkat()'? – fiddler

+0

Mój błąd, to lokalne narzędzie, to tylko Build.VERSION.SDK_INT> = 19 –

Powiązane problemy