我试图删除一个带有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(上编码。
非常感谢您的阅读。