【问题标题】:Reading com.google.android.apps.photos.contentprovider.MediaContentProvider requires the provider be exported, or grantUriPermission()读取 com.google.android.apps.photos.contentprovider.MediaContentProvider 需要导出提供者,或者 grantUriPermission()
【发布时间】:2016-07-11 07:43:17
【问题描述】:

我收到了来自 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 相册中的图片?

【问题讨论】:

    标签: android android-6.0-marshmallow android-permissions google-photos


    【解决方案1】:

    实际上,您不需要任何许可。这是安全异常。

    这是一个简单的条件: 当您通过意图 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

    【讨论】:

    • 嗨@Singan Ergin,当我们从应用程序请求图像时,这很好。如果用户分享来自谷歌照片的图像怎么办?我在从 Google 照片和 Whatsapp 图片分享图片时遇到问题,如果您找到任何解决方案,请告诉我。
    • 嗨@SimonChius,如果您从打开的活动重定向到另一个活动,您的共享授权/权限已经丢失。我向您推荐了 2 个解决方案: - 将共享内容临时保存在您的内存中并使用其他活动 - 如果您不能终止您授权的活动,请从其他活动中引用活动上下文。
    • 谢谢@Singan Ergin,我会试试的。
    猜你喜欢
    • 2023-01-05
    • 1970-01-01
    • 2018-06-19
    • 2023-01-02
    • 2016-02-05
    • 2022-09-23
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多