报错:FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted)

查了下,大概原因是因为权限的问题。(小白学Android,Android文档查起来还有点吃力,就直接谷歌+百度。)

但是Manifest里该加的权限都加了。还application增加了android:requestLegacyExternalStorage="true",表示没用。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" />

Android 6.0以后,Android对权限管理更严格了。试了几种解决办法,都不算我想要的。本意是想存储到SD卡的根路径下。

算了,先忽略了。继续往下学习吧。

解决:

自定义存储方法(原代码)

    public void saveIMG(){
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
//获取APP内存储路径,模拟器可行
// ContextWrapper cw = new ContextWrapper(getApplicationContext());
// File sdkPath = cw.getExternalFilesDir(Environment.DIRECTORY_PICTURES); //获取public存储路径,模拟器可行。真机需要动态权限
// File sdkPath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); //获取根路径,不可行。增加动态获取外部存储读取权限后,真机运行,可行。
File sdkPath=Environment.getExternalStorageDirectory(); Log.v("hehe","sdkPath:"+sdkPath.getPath());
file =new File(sdkPath,"test.jpeg");
//读取图片
@SuppressLint("ResourceType") InputStream is= getResources().openRawResource(R.drawable.kelala);
//存储图片
OutputStream io=new FileOutputStream(file); bis=new BufferedInputStream(is);
bos=new BufferedOutputStream(io); int len=0;
byte[] buf=new byte[1024];
while ((len=bis.read(buf))!=-1){ bos.write(buf,0,len);
bos.flush();
}
Log.v("hehe","读取和存储buffer");
Toast.makeText(OutStore.this,"存储成功!!!!!",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
if (bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
} } }

调用自定义存储方法的Activity里增加外部存储动态权限获取的代码:

//需要动态授外部存储权限。模拟器不弹动态权限授权对话框,晚点看下什么问题吧
int REQUEST_EXTERNAL_STORAGE = 1;
String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);

【Android报错】FileNotFoundException open failed:文件路径 EPERM (Operation not permitted)外部存储至根目录报错,Android外部存储权限动态获取问题的更多相关文章

  1. 巨坑npm run dev 报错 终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build/css/add.p

    Windows10环境 npm run dev 报错  终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build ...

  2. npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs'

    npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs' 起因:原本安装node在C盘soft文件夹下,按node ...

  3. npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法

    npm ERR! path E:\SouthernPowerGridProject\web_project\AutoOPS\autoops\node_modules\fsevents\node_mod ...

  4. 建小程序 - 报Error: EPERM : operation not permitted, scandir mac下改变一个目录的访问权限

    问题:用微信开发者工具,建一个小程序,报错(见图1): 建小程序 - 报Error: EPERM : operation not permitted, scandir 解决: 1.打开终端 2.cd ...

  5. root用户删除文件提示:Operation not permitted

    root用户删除文件提示:Operation not permitted http://blog.csdn.net/evanbai/article/details/6187578

  6. android自定义camera以及uri和文件路径之间的转换

    相对直接调用系统的camera,这种方法使用得相对还少一些.根据api文档,步骤如下: 定义一个预览类 可以参照<android高薪之路>这本书上面,有这种方法的一种完整实现 而对应的ac ...

  7. Android与JS进行交互传文件路径

    webview+h5这种混合开发最近很火,其中最重要的大概就是java代码和js的交互了,刚接触这东西两天,写写收获. 新建一个assets文件夹,要与res这个文件夹同级,其中存放web项目. 先看 ...

  8. [Android Pro] root用户删除文件提示:Operation not permitted

    reference to : http://blog.csdn.net/evanbai/article/details/6187578 一些文件看上去可能一切正常,但当您尝试删除的时候,居然也会报错, ...

  9. 解决Linux 下 root用户删除文件提示:Operation not permitted

    问题描述 用最高权限rm文件,居然报错Operation not permitted.查看权限也没有问题.可想而知有可能文件被保护了.用命令lsattr检查一下就知道. [root@linux roo ...

  10. Linux 文件删除 提示 Operation not permitted

     Linux  删除 隐藏文件提示 Operation not permitted ? linux  删除 隐藏文件 提示  Operation not permitted  不允许操作? 使用 ls ...

随机推荐

  1. django 安装cerlery error in anyjson setup command: use_2to3 is invalid.

    直接报错 error in anyjson setup command: use_2to3 is invalid. setuptools pip install "setuptools< ...

  2. 在wsl 2中编译自己的魔趣(mokee) ROM

    1.安装wsl2 a.在windows 10 系统中启用wsl2(只能是wsl2,wsl1 会编译失败), 并商店中下载ubuntu镜像,商店默认安装位置为C:\Program Files\Windo ...

  3. 5-MIGO收货-请维护容差码VP(公司代码1000)的容差限制-消息号 M8215

    请维护容差码VP(公司代码1000)的容差限制 消息号 M8215 诊断 系统试图检查输入输入是否在特定的限度范围之内.由于尚未维护显示的容差码限制,所以无法进行此操作. 步骤 系统管理员必须在公司代 ...

  4. webrtc windows编译记录

    //cmd set path=D:\zzh\depot_tools;%path% set DEPOT_TOOLS_WIN_TOOLCHAIN 0 set vs2022_install=C:\Progr ...

  5. spring security 基于角色的控制,可运行。

    基于角色的访问控制 建表语句,见 上一篇 的博文,  https://www.cnblogs.com/sdgtxuyong/p/16157870.html 在配置类中,@EnableGlobalMet ...

  6. 修改系统hosts文件访问github

    C:\Windows\System32\drivers\etc 199.232.69.194 github.global.ssl.fastly.net 140.82.114.4 github.com

  7. Java 接口与接口的多继承关系

    接口与接口之间是多继承的 注意事项:1. 多个父接口中的抽象方法重复,没关系2. 多个父接口中默认方法重复,子接口必须进行默认方法的覆盖重写 //接口A public interface MyInte ...

  8. cuda-gdb

    1, cuda-gdb 可执行文件 2. b 打断点 3. 进入核函数  把断点打在核函数中 4. r 5. cuda block 1 thread 1 选取线程

  9. Twitter Bootstrap Grid System

    Bootstrap是什么?Bootstrap是一个用来快速并且容易的开发web页面,强大的前端框架.它包含html和css基本设计模板,包含通用用户界面组件,如:排版,形式,按钮,表格,导航,下拉框, ...

  10. HttpClient详细使用示例(转)

    https://blog.csdn.net/justry_deng/article/details/81042379