首页 > 解决方案 > 使用 DocumentFile TreeUri 在 Android 11 上的 MediaStore 中更新 DATE_MODIFIED

问题描述

我正在努力使用 DocumentFile/TreeUri 更新媒体存储中的元数据。这就是我尝试这样做的方式:

boolean canWrite = documentFile.canWrite(); //returns true

Uri mediaUri = MediaStore.getMediaUri(context, documentFile.getUri());

ContentValuesvalues = new ContentValues();
values.put(MediaStore.MediaColumns.DATE_MODIFIED, newLastModified);

boolean success = context.getContentResolver().update(mediaUri, values,null, null) > 0;

它失败了,logcat 显示:

W/MediaProvider:忽略 date_modified 的突变

我究竟做错了什么?DocumentFile 是可写的,它是通过 Intent.ACTION_OPEN_DOCUMENT_TREE 接收的,并且在文件夹上调用了 takePersistableUriPermission。我还尝试在之前使用 IS_PENDING 更新条目并在之后删除:

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.IS_PENDING, 1);

boolean success = context.getContentResolver().update(mediaUri, values,
        null, null) > 0; //returns false

无论出于何种原因返回也是错误的,但我看到该文件以 .pendingxxxx 为前缀,所以它似乎工作

ContentValuesvalues = new ContentValues();
values.put(MediaStore.MediaColumns.DATE_MODIFIED, newLastModified);
values.put(MediaStore.MediaColumns.IS_PENDING, 0);

boolean success = context.getContentResolver().update(mediaUri, values,null, null) > 0; //returns false

标签: androidmediastoreandroid-11storage-access-frameworkdocumentfile

解决方案


推荐阅读