【问题标题】:Is it still possible to destructively modify files that you don't own under android 10/11 (api 29/30)?在 android 10/11 (api 29/30) 下是否仍然可以破坏性地修改您不拥有的文件?
【发布时间】:2021-11-24 07:01:03
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我认为很多预定义目录(下载、dcim 等)的 ACTION_OPEN_DOCUMENT_TREE 已被阻止。你确定你可以访问你没有创建的文件吗?当您说完全读写访问权限时,您是指 File Api、SAF 还是媒体存储?
    • @AlRo:“我认为很多预定义目录(下载、dcim 等)的 ACTION_OPEN_DOCUMENT_TREE 都被阻止了”——你得到了你所得到的。 “当您说完全读写访问权限时,您是指 File Api、SAF 还是媒体存储?” -- ACTION_OPEN_DOCUMENTACTION_OPEN_DOCUMENT_TREE 是存储访问框架 (SAF) 的一部分。
    • 我愿意使用任何不会经常打开文件选择器对话框的 API(一旦获得权限就可以了),但我当然更喜欢 File API,因为它简单且熟悉。
    • @AlRo:您没有对 Android 11+ 上绝大多数外部存储的文件系统写入访问权限,包括您似乎感兴趣的几乎所有内容。您的选择是 SAF 或 MediaStore . MediaStore 可让您创建自己的图像选择 UI,但获得写入权限的方式有点奇怪。 SAF 可以为您提供长期权限,但设备控制选择 UI。
    • @AlRo:我有 14 篇博客文章,涵盖 SAF 和 MediaStore,从 this one 开始。您还可以查看MediaStore here 的示例,在this book 中进行了介绍。
    猜你喜欢
    • 2013-07-27
    • 2011-08-18
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2020-01-20
    • 2021-11-09
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多