Android 10 MediaStore 更新镜像 RecoverableSecurityException

标签 android mediastore android-10.0 scoped-storage

我正在将 Android 应用程序更新为分区存储,我现在面临的问题是,在我的应用程序上,用户可以选择一组要自动处理的图像(他们可以选择覆盖原始图像图片)。

问题是,当我试图从其 Uri 覆盖原始图像时,Android 抛出一个 RecoverableSecurityException,它向用户显示一个对话框,请求同意修改该照片。

我想知道的是,是否可以改为显示一个权限对话框,但是一次显示整组图像(例如,一次 10 张图像),而不是必须为每个图像显示一个对话框。

我尝试使用 ContentResolverapplyBatch 方法(下面的代码模拟了这个问题),但同意对话框只显示第一个更新的图像。

val values = ContentValues().apply {
                put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis())
            }
            val ops = arrayListOf<ContentProviderOperation>()
            for (image in galleryImages) {
                ops.add(ContentProviderOperation.newUpdate(image.uri)
                        .withValues(values)
                        .build())
            }
            context.contentResolver.applyBatch(MediaStore.AUTHORITY, ops)

对此有什么想法吗?谢谢。

最佳答案

不幸的是,在 Android Q 中是不可能的。但是,在 2019 年 Android 峰会上,该团队表示在下一个 Android 版本中将可以进行批量编辑和删除,因此据说在未来的“R”版本中。

观看下一个视频,从 18:50 开始,他们在视频中简短地讨论了这件事:

https://youtu.be/UnJ3amzJM94

Android Q 中唯一的解决方案是获得对您要操作的目录的 SAF 权限,并使用 DocuentFile API 而不是 MediaStore。

关于Android 10 MediaStore 更新镜像 RecoverableSecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57786578/

相关文章:

android - 媒体不允许主目录下载

java - 致命异常 : java. lang.IllegalArgumentException fd 只能在 Android Q 中的 PrintAdapter 类的 onwrite() 中为 null

java - 如何创建一个文件夹并将我的应用程序生成的所有文件存储在 android q 的该文件夹中

java - 在不使用字符串资源的情况下,根据手机语言更改 TextView 文本

android - 如何在 "query"方法中传递两个或多个选择参数

android - 在精简版中显示 'full paid app' 功能?

android - 在android中调整视频大小

android - 无需 MediaMuxer 即可将 PCM 转换为 AAC 或 MP4 文件

android - 如何查询给定艺术家的所有专辑

android - 目标 API 级别 29 的 AndroidQ 不需要 WRITE_EXTERNAL_STORAGE 权限,它是否会破坏安全性?