Чтение com.google.android.apps.photos.contentprovider.MediaContentProvider требует, чтобы поставщик был экспортирован, или grantUriPermission ()

Я получил этот отчет о сбоях от пользователя 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) 

Оглядываясь, кажется, что это связано с разрешением Google Фото, com.google.android.apps.photos.permission.GOOGLE_PHOTOS . У меня уже есть это разрешение в моем манифесте, но у этого пользователя работает API 23, для которого требуются разрешения во время выполнения.

Проблема в том, как я могу назвать это разрешение для выполнения? Я знаю, как это сделать для стандартных разрешений, описанных в https://developer.android.com/training/permissions/requesting.html#perm-check , но когда я пытаюсь это сделать

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

Он не компилируется.

Какое имя разрешения, которое мне нужно запросить во время выполнения, чтобы получить доступ к изображению из Google Фото?

    На самом деле вам не нужны никакие разрешения. Это исключение безопасности.

    Это простое условие: когда вы запрашиваете приложение для фотографий Google через намерение ACTION_PICK, после выбора фотографии вы получите разрешение от поставщика. Если вы обрабатываете этот код в другом контексте, система выдает исключение безопасности. Потому что другой контекст не разрешен.

    Ваш код запроса выглядит следующим образом:

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

    Ответ @ bluemist очень пояснительный: https://stackoverflow.com/a/30909105/1136117