4

erhielt ich diesen Crash-Bericht von einem Android-6.0.1 Benutzer:Lese com.google.android.apps.photos.contentprovider.MediaContentProvider benötigt der Anbieter exportiert werden, oder grantUriPermission()

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) 

Von umsah Offenbar hängt dies mit der Google Fotos-Berechtigung com.google.android.apps.photos.permission.GOOGLE_PHOTOS zusammen. Ich habe diese Berechtigung bereits in meinem Manifest, aber dieser Benutzer führt API 23 aus, für die Laufzeitberechtigungen erforderlich sind.

Problem ist, wie rufe ich die Laufzeitberechtigung dafür auf? Ich weiß, wie es für die Standardberechtigungen zu tun, wie bei https://developer.android.com/training/permissions/requesting.html#perm-check beschrieben, aber wenn ich versuche

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

zu tun es nicht kompiliert.

Wie lautet der Name der Berechtigung, die ich zur Laufzeit anfordern muss, um auf ein Bild von Google Fotos zugreifen zu können?

Antwort

0

Eigentlich benötigen Sie keine Erlaubnis. Dies ist eine Sicherheitsausnahme.

Das ist einfach Bedingung: Wenn Sie anfordern, Google Fotos App über Absicht ACTION_PICK, nach Ihrer Fotoauswahl erhalten eine Erlaubnis vom Anbieter. Wenn Sie diesen Code in einem anderen Kontext verarbeiten, löst das System eine Sicherheitsausnahme aus. Weil ein anderer Kontext nicht autorisiert ist.

Ihre Anfrage Code wie folgt:

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

@ Antwort des bluemist sehr erklärend: https://stackoverflow.com/a/30909105/1136117

+0

Hallo @Singan Ergin, Das ist in Ordnung, wenn wir das Bild von unserer Anwendung anfordern. Was passiert, wenn der Nutzer das Bild von Google Fotos teilt? Ich habe Probleme mit teilen Bild von Google Fotos und WhatsApp Images, Bitte lassen Sie mich wissen, wenn Sie irgendwelche Lösungen finden. –

+0

Hallo @SimonChius, wenn Sie von geöffneter Aktivität zu einer anderen Aktivität umleiten, ist Ihre Freigabeberechtigung/Berechtigung verloren gegangen. I recommed Sie 2 Lösung: - der Austausch von Inhalten auf dem Speicher temporären Speicher und eine anderen Aktivität verwenden - wenn Sie in der Lage, die Aktivität Kontext von anderen Aktivitäten nicht tun Ihre autorisierte Aktivität zu töten, verweisen. –

+0

Danke @Singan Ergin, ich werde das versuchen. –