前言
在安卓10.0及以上,系统新增了沙盒模式,进一步增强了用户的隐私性以及开发的规范性。但是在10.0时,我们可以在AndroidManifest.xml中添加 android:requestLegacyExternalStorage=“true” 的方式,把沙盒模式关闭继续使用9.0及以下的方式去读取本地文件。但是在11.0开始,该方式将不在起作用,我们就需要去适配沙盒模式。
本篇博客借鉴了郭霖大神的博客。郭霖YYDS
一、沙盒模式
什么是沙盒模式?详细可见官方文档数据和文件存储概览。
我从文档中总结了关于APP可使用的存储方式,包括data/data 内部存储目录、缓存目录、应用外部专属目录、Download共享目录等。
在我尝试去使用外部的Download目录时我发现一个问题:既然文档上说可以通过Downlaod共享目录去读取外部文件,那么是不是说任意的外部文件只要我放在Download中我都能读取呢? 结果很明显,我失败了(只能拿到应用本身创建、系统文件例如照片、视频等,其他APP产生的文件或外部手动导入的文件均拿不到)那么11.0以上我们怎么才能获取到本地想要的文件呢? 往下看。
二、开始黑科技
1.权限申请
代码如下(示例):
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage"