在 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_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 中进行了介绍。

以上是关于在 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

如何在WPF中调用Windows 10/11 API(UWP/WinRT)