首页 > 解决方案 > 在 android 10/11 (api 29/30) 下是否仍然可以破坏性地修改您不拥有的文件?

问题描述

我想编写一个应用程序来裁剪/调整照片大小并将它们以新大小写回共享存储,但我所读到的关于 SAF 和 mediastore 如何工作的所有内容都表明我充其量只能编写文件用新名字回来。如果我不是原始创建者,在最坏的情况下,我可能根本无法打开这些文件。涉及触发 SAF 对话框以打开文件的解决方案是合理的,尽管我希望能够批量更改文件夹中的所有文件(照片)(比如 dcim)。但是,如果我还必须触发一个 SAF 对话框来写回文件,那就太糟糕了。

显然,如果我要针对 10 之前的 android 版本,这仍然可以完成,但是我会被 playstore 阻止,而且我真的不想编写只有我可以使用的应用程序。

标签: androidmediastoreandroid-10.0android-11storage-access-framework

解决方案


我读到的关于 SAF 和 mediastore 如何工作的所有内容都表明,我充其量只能用新名称将文件写回

使用ACTION_OPEN_DOCUMENT(或ActivityResultContracts.OpenDocument)。Uri您对收到的 标识的内容具有完全的读写访问权限。

涉及触发 SAF 对话框以打开文件的解决方案是合理的,尽管我希望能够批量更改文件夹中的所有文件(照片)(比如 dcim)

使用ACTION_OPEN_DOCUMENT_TREE(或ActivityResultContracts.OpenDocumentTree)。您对该树中的所有文档具有完全的读写访问权限。


推荐阅读