java.io.FileNotFoundException: open failed: EPERM (Operation not permitted)

文章讲述了在项目中使用相机拍照后,由于AndroidSDK升级至11,导致文件无法在外部存储获取并报错。文章介绍了从Android10的沙盒机制到Android11的请求LegacyExternalStorage失效的过程,提供了在不同版本下创建文件的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来项目相机拍照之后照片无法获取到,然后报错
java.io.FileNotFoundException: open failed: EPERM (Operation not permitted)

原因:项目sdk升级,导致文件创建失败

Android10以前图片直接可以保存在sd卡中,从10开始新增了沙盒机制,数据只能保存在app的目录下面。但是Android10做了兼容,

在AndroidManifest.xml中增加android:requestLegacyExternalStorage=“true”就可以在sd下面进行文件操作了。

但是sdk升级到Android11之后该方法失效,文件创建失败 ,然后报错

解决方案:

在app目录下面创建文件

if (Build.VERSION.SDK_INT >29){
            file = new File(context.getExternalFilesDir(null).getAbsolutePath() + "/photo.png");
        }else {
           file =  new File(Environment.getExternalStorageDirectory().getPath() + "/photo.png");
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值