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

背景原因

Android 10(API 级别 29)引入了多项功能和行为变更,目的是更好地保护用户的隐私权。具体变更请跳转:https://developer.android.google.cn/about/versions/10/privacy/changes
Android10+ FileNotFoundException: open failed: EACCES (Permission denied)
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适配要点,作用域存储
上一篇:C++ 变量声明 定义 作用域 链接性总结


下一篇:vue-element-admin 动态侧边栏