首先来一张适配完成后,申请权限的页面,点击打开即可:

AndroidManifest.xml权限申请:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

升级build.gradle的sdk版本:

   compileSdkVersion 30targetSdkVersion 30

申请权限:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {// 适配android11读写权限if (Environment.isExternalStorageManager()) {//已获取android读写权限} else {Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);intent.setData(Uri.parse("package:" + getPackageName()));startActivityForResult(intent, REQUEST_PERMISSION_CODE);}return;}
  @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_PERMISSION_CODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {if (Environment.isExternalStorageManager()) {//已获取android读写权限} else {//存储权限获取失败}}}

创建文件:亲测可以如下方式在文件管理器根目录正常创建和读写。

 String filePath = Environment.getExternalStoragePublicDirectory("").toString()+"/text1.txt";file = new File(filePath);try {if(!file.exists())file.createNewFile();} catch (IOException e) {e.printStackTrace();}

访问应用专属目录文件,但文件管理器无法查看:

 //这种方法可用,只是文件管理器无法查看应用的专属数据。File picFile = getExternalFilesDir("");if(!picFile.exists()){try {picFile.createNewFile();} catch (IOException e) {e.printStackTrace();}}Log.d("writeFile","path: "+picFile.getAbsolutePath());File file = new File( picFile.getAbsolutePath()+File.separator+"222.txt");if(!file.exists()){try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}

使用MediaStore写入图片和文件:

 @RequiresApi(api = Build.VERSION_CODES.Q)public static String saveFileByMediaStore(Context context,String name, String content) {ContentResolver contentResolver = context.getContentResolver();ContentValues contentValues = new ContentValues();contentValues.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, "Download/jxd/");contentValues.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, name);contentValues.put(MediaStore.Images.ImageColumns.MIME_TYPE, "text/plain");Uri uri = contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues);if (uri == null) {return "";}OutputStream out = null;InputStream in = null;try {out = contentResolver.openOutputStream(uri);byte[] src = content.getBytes(StandardCharsets.UTF_8);if (src.length > 1024) {in = new ByteArrayInputStream(src);byte[] bytes = new byte[1024];while (in.read(bytes) != -1) {out.write(bytes);}} else {out.write(src);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}if (out != null) {out.flush();out.close();}} catch (IOException e) {e.printStackTrace();}}return Environment.getExternalStorageDirectory() + "/Download/jxd/" + name + ".txt";}public static String saveBitmapByMediaStore(Context context,Bitmap bitmap, String name) {ContentResolver contentResolver = context.getContentResolver();ContentValues contentValues = new ContentValues();contentValues.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, "Pictures/jxd/");contentValues.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, name);contentValues.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/jpeg");contentValues.put(MediaStore.Images.ImageColumns.WIDTH, bitmap.getWidth());contentValues.put(MediaStore.Images.ImageColumns.HEIGHT, bitmap.getHeight());//会向Pictures/jxd/目录创建name.jpg的文件Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);if (uri == null) {return "";}//写入图片OutputStream out = null;try {out = contentResolver.openOutputStream(uri);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {if (out != null) {out.flush();out.close();}} catch (IOException e) {e.printStackTrace();}}return Environment.getExternalStorageDirectory() + "/Pictures/jxd/" + name + ".jpg";}

Android R(11)文件读写适配相关推荐

  1. Android U盘文件读写复制操作

    Android U盘文件读写复制操作 应用开发起因 一.U盘的拔插监听及读取U盘设备 二.读取文件列表 1.U盘文件列表读取 2.Storage文件列表读取 三.通过文件列表进入文件,进行文本文件的读 ...

  2. Android SDCard操作(文件读写,容量计算)

    Android SDCard操作(文件读写,容量计算) android.os.Environment 提供访问环境变量 java.lang.Object android.os.Environment ...

  3. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  4. android apk安装过程,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  5. android用IO实现日记的读写,android开发实现文件读写

    本文实例为大家分享了android实现文件读写的具体代码,供大家参考,具体内容如下 读取 /** * 文件读取 * @param is 文件的输入流 * @return 返回文件数组 */ priva ...

  6. Android R 11 后台定位权限没有 始终允许选项的解决方法

    在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...

  7. Android中的文件读写操作

    在android开发中文件操作使用的其实还是比较高频的,之前我遇到这种需求都随便写写,对此没有一个比较全面的认识,所以想借这篇文章来梳理一遍. 由于需要读写文件,这包含了读写外部sd card的文件, ...

  8. C++11 文件读写(vs2019 安装配置boost库)

    一.VS2019 安装配置boost库 1.库下载 boost v1.75下载: Boost Downloads boost v1.70下载:Version 1.70.0 本文使用boost v1.7 ...

  9. Android开发5——文件读写

    一.基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ② ...

最新文章

  1. SQL Between a and b
  2. Linux查看版本当前操作系统内核信息
  3. python结构化数据_python新手入门必备—— 使用json保存结构化数据
  4. 佩奇,是你吗?曝新款AirPods外观酷似吹风机
  5. Python使用正则表达式处理字符串
  6. Flink AggOperatorWholeWin 全窗口聚合函数
  7. 各种算法和数据结构的复杂度
  8. plus webview关闭事件监听
  9. 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
  10. oracle 退出循环 使变量清空,[转]Oracle 清除incident和trace -- ADRCI用法
  11. 读取XML字符串到临时表
  12. dll封装成activex控件_Qt编写自定义控件26-平铺背景控件
  13. 人工智能之父艾伦·麦席森·图灵
  14. STM32 热敏电阻测量温度
  15. 企业级docker仓库Harbor在kubernetes上搭建使用
  16. 搭建FTP服务器后访问时出现“FTP文件夹错误 无法与服务器建立连接”的解决办法
  17. SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNOWLEDGE)为什么失效啊?
  18. yy自动语音接待机器人_YY语音最新应用教程 场控机器人
  19. 新特性之MAPI over HTTP \ 配置 MAPI over HTTP
  20. linux进程状态详解

热门文章

  1. php字符串转数组重命名键,【PHP】字符串转数组、数组转字符串
  2. SQLyog Community Edition 官方下载地址
  3. 中英文对照 —— 概念的图解
  4. android 小钢琴
  5. 2 应用层 - 应用层协议原理
  6. 有效防范局域网病毒***的方法
  7. 商标45类分类表明细表_45类(2017)-商标类别明细
  8. PMP-27项目范围管理-创建工作分解结构
  9. spring字符串判空_spring框架返回json数据null转空字符串
  10. C# 托盘图标缓存清除