【发布时间】:2020-02-23 20:12:43
【问题描述】:
我一直在通过 ContentResolver 更新 MediaStore 中的元数据,但这不再适用于 Android Q (API 29)。以下代码给了我一个警告,并且描述没有更新:
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DESCRIPTION, "Some text");
int res = getContext().getContentResolver().update(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values,
MediaStore.Images.Media._ID + "= ?", new String[]{sImageId});
android.process.media W/MediaProvider:忽略 来自 com.example.android.someapp.app 的描述
这篇 Medium 帖子描述了 how Google has changed the API for accessing and updating files,但是只更新 元数据 呢?该警告似乎告诉我 Google 不再希望允许第三方应用程序使用 MediaStore,我还发现了警告的来源: https://android.googlesource.com/platform/packages/providers/MediaProvider/+/master/src/com/android/providers/media/MediaProvider.java#2960
有谁知道为什么更新无法在 Android 10 上运行,正确的解决方法是什么?
【问题讨论】:
-
您是否将
insert()的内容从这个应用程序导入到MediaStore中?还是来自其他应用的内容? -
这是设备上所有文件夹(存储桶)中图像的元数据;主要是相机应用。所以,不,不是属于或源自我的应用程序的内容。我知道你要怎么做,这是对 Android 的政策更改,因为这在以前的 Android 版本中运行良好。是否有一些技术解决方法,或者这不再可能?我的想法是,描述“属于”图像。我的应用程序只提供便利,使输入标题变得容易。文本不应该是我的应用程序私有的。
-
哦,就上下文而言,我的应用程序是一个画廊类型的应用程序,它显示设备上的所有图像并让用户输入描述(标题),它存储在设备上(即在 MediaStore 中)并在 JPEG(EXIF 标签)中。例如,用于制作相册。
-
就我个人而言,我还没有在新的
MediaStore中尝试过update()用于其他应用程序创建的内容。我的理解是,尝试这样做会触发RecoverableSecurityException。您可以使用该异常中的详细信息来引发系统 UI,以允许用户授予您执行您尝试执行的任何操作的权限。我以 Google 的 this sample app 为基础写了关于 here 的文章。 -
SDKINT-29:尝试更新应用程序自行创建的文件:问题:java.lang.IllegalArgumentException:内容移动://media/external/file/70 这是' t 部分定义明确的集合不允许
标签: android mediastore android-10.0