gpt4 book ai didi

android - 正确删除DocumentFile(尊重MediaStore)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:12 27 4
gpt4 key购买 nike

我有一个 DocumentFile 定义在以下两种方式:

DocumentFile documentFile;
Uri documentFileUri;

我可以通过以下方法从sd卡中删除文档文件:

  1. documentFile.delete();
  2. DocumentsContract.deleteDocument(contentResolver, documentFileUri);

但以上方法都不会从 MediaStore 中删除相应的条目。

处理该问题的正确方法是什么?如果我使用 ContentProvider 删除本地文件,它将删除 File 和数据库中的行 (contentResolver.delete(localFileUri, null, null) ;)。我希望如果我使用 DocumentsContract 会发生同样的情况,但它不会发生......

我想要什么

我想立即更新 MediaStore。通常我会调用 contentResolver.delete(documentFileUri, null, null); 但这会失败并出现一个异常,即 uri 不支持删除...

问题

有没有比我的解决方法更有效的方法?

解决方法

目前,我使用以下函数在删除 DocumentFile 后立即更新媒体存储:

public static boolean updateAfterChangeBlocking(String path, int timeToWaitToRecheckMediaScanner)
{
final AtomicBoolean changed = new AtomicBoolean(false);
MediaScannerConnection.scanFile(StorageManager.get().getContext(),
new String[]{path}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
changed.set(true);
}
});

while (!changed.get()) {
try {
Thread.sleep(timeToWaitToRecheckMediaScanner);
} catch (InterruptedException e) {
return false;
}
}

return true;
}

最佳答案

正如 fatboy 所指出的,这种行为是设计使然 - 记录在这个谷歌问题中:https://issuetracker.google.com/issues/138887165

解决方案:

可能没有比我已经在我的问题中发布的更好的解决方案了:

  • 通过 DocumentFile 对象或使用它的 URIDocumentsContract.deleteDocument 删除文件>
  • 对于即时媒体商店更新(这正是我想要的),您必须手动更新媒体商店,例如通过调用 MediaScannerConnection.scanFile(...) 就像我已经在我的问题中发布的那样

关于android - 正确删除DocumentFile(尊重MediaStore),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35832122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com