Leer com.google.android.apps.photos.contentprovider.MediaContentProvider requiere que el proveedor se exporte o grantUriPermission ()

Recibí este informe de error de un usuario de Android 6.0.1:

STACK_TRACE=java.lang.SecurityException: Permission Denial: reading com.google.android.apps.photos.contentprovider.MediaContentProvider uri content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F19181/ORIGINAL/NONE/443149508 from pid=18891, uid=10128 requires the provider be exported, or grantUriPermission() at android.os.Parcel.readException(Parcel.java:1620) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146) at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:692) at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1104) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:942) at android.content.ContentResolver.openInputStream(ContentResolver.java:662) at fr.free.nrw.commons.upload.UploadService.uploadContribution(UploadService.java:176) at fr.free.nrw.commons.upload.UploadService.handle(UploadService.java:114) at fr.free.nrw.commons.upload.UploadService.handle(UploadService.java:27) at fr.free.nrw.commons.HandlerService$ServiceHandler.handleMessage(HandlerService.java:19) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) 

De mirar a su alrededor, parece que esto está relacionado con el permiso de Google Fotos, com.google.android.apps.photos.permission.GOOGLE_PHOTOS . Ya tengo este permiso en mi manifiesto, pero este usuario está ejecutando API 23, que requiere permisos de tiempo de ejecución.

El problema es, ¿cómo puedo llamar al permiso de ejecución para esto? Sé cómo hacerlo para los permisos estándar como se describe en https://developer.android.com/training/permissions/requesting.html#perm-check , pero cuando intento hacer

 ActivityCompat.requestPermissions(thisActivity, new String[]{com.google.android.apps.photos.permission.GOOGLE_PHOTOS}, 

no compila.

¿Cuál es el nombre del permiso que necesito solicitar en tiempo de ejecución para poder acceder a una imagen de Google Fotos?

En realidad, no necesita ningún permiso. Esto es una excepción de seguridad.

Esa es la condición simple: Cuando solicitas una aplicación de fotos de Google mediante la intención ACTION_PICK, después de recibir tu foto, recibes un permiso del proveedor. Si procesa este código en otro contexto, el sistema lanzará una excepción de seguridad. Porque otro contexto no está autorizado.

Su código de solicitud como este:

 Intent galleryIntent = new Intent(Intent.ACTION_PICK); galleryIntent.setType("image/*, video/*"); if (galleryIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(Intent.createChooser(galleryIntent, "Select File"), RESULT_CODE); } 

@ respuesta de Bluemist muy explicativo: https://stackoverflow.com/a/30909105/1136117

  • Permisos para la búsqueda por voz
  • No puedo obtener la ruta real de la tarjeta SD extraíble. ¿Hay alguna manera de conseguir?
  • Android M Intención de cámara + error de permiso?
  • Cómo ocultar la barra inferior del sistema en la tableta android
  • ¿Qué tipo de aplicación de Android requerirá permiso de android.permission.READ_PHONE_STATE?
  • Archivos de expansión en Android 6
  • Obtener los permisos del sistema de Android al poner la aplicación en / system / app?
  • Ni el usuario ni el proceso actual tienen android.permission.ACCESS_COARSE_LOCATION
  • Poner permisos a manifiesto del proyecto de la biblioteca .aar de Android
  • Android READ_EXTERNAL_STORAGE permiso no funciona
  • No se puede contestar llamadas entrantes en android marshmallow 6.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.