Android Q 将为应用引入新的沙盒文件系统 Scoped Storage。此政策将在任何以 API>=29 为目标的应用程序上强制执行。第三方文件管理器应用程序应如何克服此限制并继续正常工作?
这个问题对于任何具有一些文件管理功能的应用程序来说都是通用的,比如浏览、保存、加载、同步等。
Android Q 将为应用引入新的沙盒文件系统 Scoped Storage。此政策将在任何以 API>=29 为目标的应用程序上强制执行。第三方文件管理器应用程序应如何克服此限制并继续正常工作?
这个问题对于任何具有一些文件管理功能的应用程序来说都是通用的,比如浏览、保存、加载、同步等。
我相信您的问题相当于:应用程序如何访问主手机存储(通常/sdcard
)?
答案是:要求用户访问整个/sdcard
usingACTION_OPEN_DOCUMENT_TREE
操作。这样您的应用程序就可以访问/sdcard
其所有子目录。
来自https://developer.android.com/preview/privacy/scoped-storage#manage-groups-of-files:
文件管理和媒体创建应用程序通常管理目录层次结构中的文件组。这些应用程序可以调用 ACTION_OPEN_DOCUMENT_TREE 意图以允许用户授予对整个目录树的访问权限。这样的应用程序将能够编辑所选目录及其任何子目录中的任何文件。
使用此界面,用户可以从任何已安装的 DocumentsProvider 实例访问文件,任何本地支持或基于云的解决方案都可以支持。
Github 上还有一个示例项目,展示了它是如何完成的:https ://github.com/android/storage/tree/228c8e0aa19586bfcf36318ddb191719537a45a4/ActionOpenDocumentTree
这就是“Google 文件”目前在 Android Q beta 上所做的事情:https ://www.androidpolice.com/2019/04/08/scoped-storage-in-android-q-beta-2-limits-how-apps -可以访问文件/#1