IllegalArgumentException en grantUriPermission en el nivel 19 de API

La siguiente línea de código

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

Genera esta excepción cuando se ejecuta en dispositivos con API nivel 19 (KitKat), pero no en versiones posteriores:

 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) 

¿Por qué es así?

Creo que esto es causado por un cambio añadido en KitKat que debería tener acceso a contenido fijo, pero lo rompieron.

Tendría que ejecutar una comprobación utilizando Build.VERSION.SDK_INT <19 (es decir, 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

Creo que esto es un error en 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 falta en condición de verificación.

De la versión lolipop, funciona correctamente

  • ShouldInterceptRequest en Android 4.4 KitKat
  • Instalación de controlador USB para Nexus 4 (con KitKat) en Windows 8 de 64 bits - "ningún controlador de software compatible"
  • Enviar mensaje SMS mediante una aplicación no predeterminada de SMS en Android 4.4
  • Autostart html5 video usando el navegador android 4
  • Android KitKat: Todo el contenido de mi aplicación aparece detrás de ActionBar y StatusBar después de cambiar el color de StatusBar
  • SwipeRefreshLayout se oculta detrás de ActionBar con barras de estado transparentes
  • Android 4.4: ¿es válido el permiso WRITE_EXTERNAL_STORAGE en el almacenamiento externo primario / mnt / sdcard?
  • El proceso de aplicación se mata en Android KitKat
  • No se puede encontrar la imagen del sistema en Emulator en Android Studio con API de Google
  • Android PdfDocument dañado cuando se guarda en un almacenamiento externo
  • Navegación incorrecta al guardar contactos en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.