Android10+ FileNotFoundException: open failed: EACCES (Permission denied)

背景原因

Android 10(API 级别 29)引入了多项功能和行为变更,目的是更好地保护用户的隐私权。具体变更请跳转:https://developer.android.google.cn/about/versions/10/privacy/changes
在这里插入图片描述
android Q 规定了APP有两种外部存储空间视图模式:Legacy ViewFiltered View。采用了新的分区储存权限,老的存储权限READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE废弃,替换成新的存储权限android.permission.READ_MEDIA_AUDIOandroid.permission.READ_MEDIA_IMAGESandroid.permission.READ_MEDIA_VIDEO,并且只提供了多媒体文件的读权限,未提供写权限,现在应用没有权限直接删除别的应用生成的任何文件,包括多媒体文件。

解决方案

  1. 自降版本 compileSdkVersion <= 27 (当然这个不建议,毕竟要跟随潮流)
  2. 在清单文件AndroidManifest.xml中添加 : android:requestLegacyExternalStorage="true" (指定分区按照以前的模式,也不是长久处理方式)
  3. 使用FileProviderContent Uri替换File Uri
    可以参考:
    华为:Google Q版本应用兼容性整改指导
    OPPO:Android Q版本应用兼容性适配指导
    郭霖:Android 10适配要点,作用域存储

猜你喜欢

转载自blog.csdn.net/luzhenyuxfcy/article/details/106850354