- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 DocumentFile
定义在以下两种方式:
DocumentFile documentFile;
Uri documentFileUri;
我可以通过以下方法从sd卡中删除文档文件:
documentFile.delete();
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
对象或使用它的 URI
和 DocumentsContract.deleteDocument
删除文件>MediaScannerConnection.scanFile(...)
就像我已经在我的问题中发布的那样关于android - 正确删除DocumentFile(尊重MediaStore),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35832122/
想象一下,你想检查“/folder/subfolder/subsubfolder/test/test.txt”文件是否存在,你会做如下: DocumentFile sdCard = ...; // i
如果我调用 DocumentFile.fromTreeUri()在主目录上,我列出了它的内容,它返回所有 DocumentFile与预期的目录中包含的文件夹和文件相关的对象,但是当我尝试调用 Docu
我尝试使用 DocumentFile (由于存储访问框架)在创建文件之前检查文件是否存在。但是DocumentFile().fromTreeUri()删除可能的 Uri 中不存在的部分,这会导致 Do
有没有办法从给定的 DocumentFile 中获取 RandomAccessFile? 我知道可以通过 getUri 获取 InputStream InputStream inputStream =
我正在尝试递归遍历 Android DocumentFile 树,但我无法获得要为子文件夹返回的文件列表。当我在文件夹 URI 上尝试 listFiles() 时,我每次都得到返回的根文件列表。 为什
对于Android,以下代码返回一个Uri,可用于创建与目录对应的DocumentFile。 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMEN
我在 Lollipop 遇到的情况是: 用户授予的目录树 (DocumentFile)。 从媒体提供商处检索到的需要修改的音频文件集合。 Uri mediaUri = Uri.withAppended
我使用 DocumentFile 检查文件元数据和存在性。这是这样实例化的: DocumentFile df = DocumentFile.fromSingleUri(context, uri); b
我正在尝试使基于File 的文档系统适应使用DocumentFile 的内容,以便允许在 API >= 29 上进行外部存储读/写访问。 我让用户使用 Intent.ACTION_OPEN_DOCUM
背景 从 API 21 (Lollipop) 开始,应用可以获得修改真实 SD 卡的特殊“权限”,如我之前写的帖子(here 和 here)所示。 问题 我可以删除文件,也可以创建文件,但是我找不到执
在我的应用程序中,用户选择一个目录,然后在 onActivityResult 中创建一个 DocumentFile,如下所示: Uri treeUri = resultData.getData();
Android API 有 DocumentFile class .这个类有canWrite() method . 假设我调用了这个方法,它返回了 true。还假设此对象代表“原始”文件。 现在我该怎
我有一个从 ACTION_OPEN_DOCUMENT_TREE 获得的树 URI , 如何在不使用 findFiles() 的情况下获得作为这棵树的子树的 DocumentFile ?假设我知道如何获
我想创建类似“PDF 查看器应用程序”的东西。应用程序将在用户选择的位置搜索所有 *.pdf 文件。用户可以通过这个函数选择这个文件夹: Intent intent = new Intent(Inte
我正在尝试使用 DocumentFile 在我的 android 5.1 手机上列出外部存储设备中的文件 String rootPathURI = "file:/media/storage/sdcar
我想将文件从内部存储复制或移动到 SD 卡。我通过存储访问框架 (SAF) 和 DocumentFile 类... 复制是基于流的,DocumentFile 没有像 File 类那样的功能来设置最后修
我需要访问 Android Studio 项目中的 DocumentFile 类。我花了很长时间才解决这个问题。 Andriod 开发人员文档说我需要导入“androidx.documentfile.
我想用 java.util.zip.ZipFile 读取一个 zip 文件与安卓 DocumentFile 插图: 使用 Storage Access Framework,我得到了 android 系
如果选择了设备的主内存,我需要从 DocumentFile 或 Uri 中获取一个具有正确方案的文件,而不是具有 content://com.android.externalstorage.docum
好吧,我找了又找,没有人知道我的确切答案,或者我错过了。我让我的用户通过以下方式选择目录: Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT
我是一名优秀的程序员,十分优秀!