Intereting Posts
Android-счетчик не активировал onItemSelected Исключить исключение указателя при импорте шрифта в android Размытые изображения SVG в хром для Android Как я могу предоставить панель авто-скрыть / показать, когда прокрутка моего recyclerview с координатором макета? «Невозможно сделать статическую ссылку на нестатический метод» в Android Spinner с длинным текстом не работает нормально Как передать параметры OnClickListener? Получение высоты текстового представления перед рендерингом в макет Действительно ли необходимо создавать таблицы SQLite при каждом запуске приложения? Используйте CountDown Timer или сверните свой собственный на основе Handler на Android Можно ли просмотреть макет AppWidget в Eclipse? Ошибка при попытке поделиться ссылкой на facebook с Android «Кнопка« Назад »с помощью панели инструментов getSupportActionbar и appcompat v7 Чтобы активность Android всегда использовалась в режиме ландшафта Является ли матч (Uri) класса UriMatcher реентерабельным?

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) 

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

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

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

Я думаю, что это ошибка в KitKat.

https://android.googlesource.com/platform/frameworks/base/+/kitkat-mr2.2-release/services/java/com/android/server/am/ActivityManagerService.java#6214

Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION отсутствует в состоянии проверки.

От версии lolipop, она работает правильно