安卓11.0:如何使用存储访问框架删除文件



我试图删除一个带有Uri的文件,但我不知道如何在这个文件上添加标志(我是安卓系统的新手(。

我的应用程序同时管理媒体文件和其他文件。

我设法删除了媒体文件与媒体存储API的文档。但对于其他文件,它表示要使用存储访问框架。

所以,我得到的文件的Uri是这样的:

Uri contentUri = ContentUris.withAppendedId(MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL), id);

然后我想这样删除它:

DocumentsContract.deleteDocument(getContentResolver(), uri);

但是,它不起作用,因为我没有将FLAG_SUPPORTS_DELETE添加到文件中。我不明白该怎么做。

我读了好几次存储访问框架文档以及stackoverflow上的各种帖子,但我没有找到任何可以帮助我的东西(我是安卓系统的新手(。

经过大量研究,我可以为我的问题提供答案。

我的应用程序旨在列出所有重复的文件,并通过用户界面删除它们。

对于媒体文件,我没有遇到任何大的困难,Mediastore API使用起来比较容易。

然而,对于非媒体文件来说,这是非常复杂的。事实上,我最初是通过媒体商店API列出它们的,但我很快意识到用这个API不可能删除它们。

所以我选择了saf(存储访问框架(,但在重读了几次文档后,我意识到我无法访问下载目录。对我的应用程序正常运行至关重要的目录。

然后,我尝试将Mediastore API和File API结合起来。我通过mediastore恢复了文件的路径,并通过文件API删除了它们。然而,小问题是,这些文件从我的应用程序中删除得很好,但我仍然可以通过谷歌的文件应用程序访问和查看它们。

回到墙上,我不知道如何摆脱它。作为安卓系统的新手,我没有任何经验(这是我制作的第一个应用程序(。但我还是发现了一个";技巧";删除非媒体文件:

getContentResolver().delete(path, null, null);

这行代码允许我删除一个文件(从我的应用程序和谷歌的Files应用程序中(。然而,我完全不知道这是不是一种糟糕的做法。我还看到我可以用这个来删除一个文件:

getApplicationContext().deleteFile(filename);

但我仍然不知道这是否是一种糟糕的做法。

这是我的旅程";解决";这个问题:如何在不使用saf(存储访问框架(的情况下删除非媒体文件(因为无法访问下载目录(?

如果你有什么意见、建议或其他,我很感兴趣。我也很好奇你是否有其他技巧来解决我的问题,以及我的解决方案是好是坏。

放纵一下,我是安卓系统的新手,我只在安卓11(安卓R(上编码。

非常感谢您的阅读。

最新更新