在 android 10/11 (api 29/30) 下是不是仍然可以破坏性地修改您不拥有的文件?
Posted
技术标签:
【中文标题】在 android 10/11 (api 29/30) 下是不是仍然可以破坏性地修改您不拥有的文件?【英文标题】: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 屏蔽,而且我真的不想编写 仅 的应用程序> 我可以使用。
【问题讨论】:
【参考方案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_DOCUMENT
和 ACTION_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 中进行了介绍。以上是关于在 android 10/11 (api 29/30) 下是不是仍然可以破坏性地修改您不拥有的文件?的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava
Ubuntu 16G内存在android系统 10/11/12/13编译 framework时候经常oom内存不足,电脑卡死解决办法stubs-docs-non-updatable metalava