8

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 フォトの画像にアクセスできるようにするために、実行時にリクエストする必要がある権限の名前は何ですか?

4

1 に答える 1

5

実際には、許可は必要ありません。これはセキュリティ例外です。

それは簡単な条件です: インテント ACTION_PICK を介して Google フォト アプリにリクエストすると、選択した写真がプロバイダーから許可を受け取った後です。このコードを別のコンテキストで処理すると、システムはセキュリティ例外をスローします。別のコンテキストが許可されていないためです。

次のようなリクエストコード:

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

于 2016-11-07T06:35:28.383 に答える