open failed: EACCES (Permission denied)解决方法 AndroidQ

前言

前几天上线的项目 这几天在疯狂修改问题
其中一个问题 引人注目 需要记录一下解决过程
一来 加深记忆
二来 帮助有需要的人

问题:open failed: EACCES (Permission denied)

项目中一个用到头像剪切的地方
是打开手机相册 将图片带到剪切板 进行剪切后设置为客户头像

我自己的手机(Android 9.0)在使用的过程中没有问题!
但是上线以后 有客户反馈 他的手机在设置头像的时候打开图片后显示一片灰色空白

当时没有考虑到是版本的问题 以为是兼容出了问题
刚好公司同事有Android10.0的手机打开后就是灰白色

于是,开始排查版本问题 权限是否没有给到位
几番查阅资料后 找到问题 并 成功解决

问题原因

Android Q文件存储机制修改成了沙盒模式
APP只能访问自己目录下的文件和公共媒体文件。
对于AndroidQ以下,还是使用老的文件存储方式。
Android Q仍然使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE
作为存储相关运行时权限,但现在即使获取了这些权限,访问外部存储也受到了限制。

AndroidQ 问题解决

在Android 版本 targetSdkVersion 29以后
打开AndroidManifest.xml文件
找到

  android:requestLegacyExternalStorage="true"

open failed: EACCES (Permission denied)解决方法 AndroidQ_第1张图片

此行代码意思为:
使用旧的存储策略,不使用androidQ的新策略。但这个不是长久之计,很快将会强制都使用新策略。

其他解决方法:

在Android 版本 targetSdkVersion 29以后

  • 1.需要长期保存并且卸载也不能删除的,使用公有目录
    公有目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等
    地址:/storage/emulated/0/Downloads(Pictures)
    公有目录下的文件不会跟随APP卸载而删除。

  • 2.不需要长期保存的,并且涉及安全问题的,使用私有目录
    APP私有目录
    地址:/storage/emulated/0/Android/data/包名/files

共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
open failed: EACCES (Permission denied)解决方法 AndroidQ_第2张图片

你可能感兴趣的:(BUG处理总结,android,android10.0权限,AndroidQ,Permission)