背景原因
Android 10(API 级别 29)引入了多项功能和行为变更,目的是更好地保护用户的隐私权。具体变更请跳转:https://developer.android.google.cn/about/versions/10/privacy/changes
android Q 规定了APP有两种外部存储空间视图模式:Legacy View
、Filtered View
。采用了新的分区储存权限,老的存储权限READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE
废弃,替换成新的存储权限android.permission.READ_MEDIA_AUDIO
、android.permission.READ_MEDIA_IMAGES
和android.permission.READ_MEDIA_VIDEO
,并且只提供了多媒体文件的读权限,未提供写权限,现在应用没有权限直接删除别的应用生成的任何文件,包括多媒体文件。
解决方案
- 自降版本
compileSdkVersion <= 27
(当然这个不建议,毕竟要跟随潮流) - 在清单文件
AndroidManifest.xml
中添加 :android:requestLegacyExternalStorage="true"
(指定分区按照以前的模式,也不是长久处理方式) - 使用
FileProvider
的Content Uri
替换File Uri
可以参考:
华为:Google Q版本应用兼容性整改指导
OPPO:Android Q版本应用兼容性适配指导
郭霖:Android 10适配要点,作用域存储