Android10.0 外部存储权限问题
2021/6/12 20:20:58
本文主要是介绍Android10.0 外部存储权限问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
权限问题
以往配置的权限为:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>写的权限 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>SDCard的权限
运行在Android10.0的设备的时候会出现权限被拒绝的问题,导致文件没有办法新建和写入。
在网上搜了很多解决办法,也在问答区看到很多大佬的说法,总结出来:
1)动态申请权限:
//ContextCompat.checkSelfPermission会返回一个int类型数值 //参数1:环境上下文 //参数2:权限常量名 int i = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); //如果权限没有被赋予则动态申请权限 if (i != PackageManager.PERMISSION_GRANTED) { //动态申请权限 //参数1:上下文 //参数2:权限常量名,在Manifest下 //参数3:requestCode ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); }
2)使用getExternalFileDir()获取文件路径:
因为安卓10只能在系统分配的固定文件夹中新建目录和文件
String path = this.getExternalFilesDir(null).getAbsolutePath() + "123.txt";
控制台打印的路径:
E/TAG: /storage/emulated/0/Android/data/com.example.neibucuncuapplication/files123.txt
而使用Environment.getExternalStorageDirectory获取的路径则是
E/TAG: /storage/emulated/0/123.txt
Environment.getExternalStorageDirectory().getAbsolutePath()+"/123.txt";
3)正常完成保存和读取操作:
switch (view.getId()) { //保存按钮点击事件: case R.id.btn_save: //根据绝对路径新建文件 File file = new File(path); //判断该文件是否已经存在 //如果不存在 取反 if (!file.exists()) { //则新建这个文件 file.createNewFile(); } //创建文件输出流 //参数1:路径 参数2:是否追加 FileOutputStream fos = new FileOutputStream(path,true); //文件输出流用字节方式写入输入框内的数据 fos.write(mEdit.getText().toString().getBytes()); //点击保存后清空输入框里的内容 mEdit.setText(""); //关闭文件输出流 fos.close(); break; //读取按钮点击事件: case R.id.btn_read: //创建文件输入流 参数:路径 FileInputStream fis = new FileInputStream(path); //创建字节数组 长度1024 byte[] bytes = new byte[1024]; //文件输入流读取到的长度就是字节数组的长度 int len = fis.read(bytes); //newString 参数1:字节数组 参数2:0,参数3:实际读到的长度 String str=new String(bytes,0,len); //把读到的字节转换成String类型的 //把文本控件内容设置为读到的字符串 mTextView.setText(str); //关闭文件输出流 fis.close(); break; }
这篇关于Android10.0 外部存储权限问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路