Android R(11)文件读写适配
首先来一张适配完成后,申请权限的页面,点击打开即可:
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)文件读写适配相关推荐
- Android U盘文件读写复制操作
Android U盘文件读写复制操作 应用开发起因 一.U盘的拔插监听及读取U盘设备 二.读取文件列表 1.U盘文件列表读取 2.Storage文件列表读取 三.通过文件列表进入文件,进行文本文件的读 ...
- Android SDCard操作(文件读写,容量计算)
Android SDCard操作(文件读写,容量计算) android.os.Environment 提供访问环境变量 java.lang.Object android.os.Environment ...
- android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- android apk安装过程,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- android用IO实现日记的读写,android开发实现文件读写
本文实例为大家分享了android实现文件读写的具体代码,供大家参考,具体内容如下 读取 /** * 文件读取 * @param is 文件的输入流 * @return 返回文件数组 */ priva ...
- Android R 11 后台定位权限没有 始终允许选项的解决方法
在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...
- Android中的文件读写操作
在android开发中文件操作使用的其实还是比较高频的,之前我遇到这种需求都随便写写,对此没有一个比较全面的认识,所以想借这篇文章来梳理一遍. 由于需要读写文件,这包含了读写外部sd card的文件, ...
- C++11 文件读写(vs2019 安装配置boost库)
一.VS2019 安装配置boost库 1.库下载 boost v1.75下载: Boost Downloads boost v1.70下载:Version 1.70.0 本文使用boost v1.7 ...
- Android开发5——文件读写
一.基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ② ...
最新文章
- SQL Between a and b
- Linux查看版本当前操作系统内核信息
- python结构化数据_python新手入门必备—— 使用json保存结构化数据
- 佩奇,是你吗?曝新款AirPods外观酷似吹风机
- Python使用正则表达式处理字符串
- Flink AggOperatorWholeWin 全窗口聚合函数
- 各种算法和数据结构的复杂度
- plus webview关闭事件监听
- 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
- oracle 退出循环 使变量清空,[转]Oracle 清除incident和trace -- ADRCI用法
- 读取XML字符串到临时表
- dll封装成activex控件_Qt编写自定义控件26-平铺背景控件
- 人工智能之父艾伦·麦席森·图灵
- STM32 热敏电阻测量温度
- 企业级docker仓库Harbor在kubernetes上搭建使用
- 搭建FTP服务器后访问时出现“FTP文件夹错误 无法与服务器建立连接”的解决办法
- SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNOWLEDGE)为什么失效啊?
- yy自动语音接待机器人_YY语音最新应用教程 场控机器人
- 新特性之MAPI over HTTP \ 配置 MAPI over HTTP
- linux进程状态详解