知乎的Matisse没有适配Android 10和Android 11。Android 10和Android 11启用了分区存储,Android10 在AndroidManifest.xml的Android标签内设置android:requestLegacyExternalStorage="true"后才可以访问沙盒路径下的文件。Android 11已经强制启用分区存储啦,所以需要进行适配。
- Android10不在AndroidManifest.xml的Android标签内设置android:requestLegacyExternalStorage="true"的话会存在拍照完成后点击勾勾不响应的情况
- 如果不适配Android 11会出现无法启动系统拍照。
那么现在我们就开始对Matisse Android 11分区存储进行适配吧
1.将Environment.getExternalStorageDirectory()换成Context#getExternalFilesDir(String)(获取到 SDCard/Android/data/你的应用的包名/files/ 目录,卸载应用的时候文件会被删除)
2.修改FileProvider的xml文件,将external-path改为external-files-path
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="my_images"
path="Pictures"/>
</paths>
path | 解释 |
---|---|
root-path | 设备的根目录new File("/") |
files-path | context.getFilesDir() |
cache-path | context.getCacheDir() |
external-path | Environment.getExternalStorageDirectory() |
external-files-path | context.getExternalFilesDirs() |
external-cache-path | context.getExternalCacheDirs() |