2016-01-12 5 views
5

Следующая строка кодаIllegalArgumentException в grantUriPermission на уровне API 19

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

поднимает это исключение при работе на устройствах с уровнем API 19 (KitKat), но не на более поздних версиях:

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) 

Почему это так?

+1

Также проверьте это [Как упорствовать разрешение в андроиде API 19] (http://stackoverflow.com/questions/25414352/how-to-persist-permission-in- android-api-19-kitkat) –

ответ

2

Я считаю, что это вызвано изменением, добавленным в KitKat, которое должно иметь фиксированный доступ к контенту, но они сломали его.

Вам нужно будет запустить проверку с помощью Build.VERSION.SDK_INT < 19 (то есть. До 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

Где находится 'Utils.isKitkat()'? – fiddler

+0

Моя ошибка - это локальная утилита, это просто Build.VERSION.SDK_INT> = 19 –