我用以下两种方式定义了一个DocumentFile:
DocumentFile documentFile;
Uri documentFileUri;我可以通过下列方法从sd卡中删除文档文件:
documentFile.delete();DocumentsContract.deleteDocument(contentResolver, documentFileUri);但是,上述方法中的任何一种都将从MediaStore中删除相应的条目。
正确的处理方法是什么?如果我使用ContentProvider删除本地文件,它将从数据库(contentResolver.delete(localFileUri, null, null);)中删除File和行。我希望如果我使用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;
}发布于 2019-08-13 06:42:16
正如胖子指出的那样,这种行为是由设计上记录在谷歌的问题:https://issuetracker.google.com/issues/138887165中。
解决方案:
可能没有比我在问题中已经发表的内容更好的解决办法了:
DocumentFile对象或它的URI和DocumentsContract.deleteDocument删除文件MediaScannerConnection.scanFile(...),就像我在问题中已经发布的那样https://stackoverflow.com/questions/35832122
复制相似问题