首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确删除DocumentFile (尊重MediaStore)

正确删除DocumentFile (尊重MediaStore)
EN

Stack Overflow用户
提问于 2016-03-06 20:27:18
回答 1查看 2K关注 0票数 10

我用以下两种方式定义了一个DocumentFile

代码语言:javascript
复制
DocumentFile documentFile;
Uri documentFileUri;

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

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

但是,上述方法中的任何一种都将从MediaStore中删除相应的条目。

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

我想要什么

我想错误地更新MediaStore。通常,我会调用contentResolver.delete(documentFileUri, null, null);,但这将失败,但有一个例外,即uri不支持删除.

问题

有比我的解决办法更有效的方法吗?

解决方案

目前,我使用以下功能在删除DocumentFile后立即更新媒体商店

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2019-08-13 06:42:16

正如胖子指出的那样,这种行为是由设计上记录在谷歌的问题:https://issuetracker.google.com/issues/138887165中。

解决方案:

可能没有比我在问题中已经发表的内容更好的解决办法了:

  • 通过DocumentFile对象或它的URIDocumentsContract.deleteDocument删除文件
  • 对于即时媒体商店更新(这正是我想要的),您必须手动更新媒体商店,例如调用MediaScannerConnection.scanFile(...),就像我在问题中已经发布的那样
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35832122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档