Android10(Q,API-29)以上版本无法在存储卡目录创建文件夹的问题
运行环境:华为Mate P10 Pro,Android 10,EMUI版本10.0.0
注意:内部存储/外部存储等非本文讨论内容
Android 10(Q, API-29)新建文件夹
Android 10(Q,API-29)中不在允许随意创建文件夹了,要用安卓提供的文件夹。
原来比较常用的方式是:
Environment.getExternalStorageDirectory()
Android 10(Q,API-29)后需要使用的方式:
Context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)
有说在AndroidMenifest.xml中的application添加如下标签也可以解决,但是貌似试了不行(build.gradle中使用了targetVersion:29),
android:requestLegacyExternalStorage="true"
注意:requestLegacyExternalStorage属性只能在api>=29以上版本使用。
build.gradle
笔者一个旧项目中的build.gradle配置:
compileSdkVersion 25
// buildToolsVersion "21.1.2"buildToolsVersion '28.0.3'defaultConfig {applicationId 'com.xx.xx'minSdkVersion 18targetSdkVersion 25multiDexEnabled trueversionCode myVersionCodeversionName myVersionName
可以在 Environment.getExternalStorageDirectory() 的旧方式目录创建对应的文件夹,于是将新项目中的targetSdkVersion改为了28,仍旧失败,再往下改版本可能有些资源依赖无法正常执行,这时候看到一个说明:
在开发过程中,使用File.mkdirs()会返回false创建文件夹失败,有可能是权限不够的原因,需要在AndroidManifest.xml中添加如下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--SDCard写权限--><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!--SDCard读权限--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!--在SDCard中创建与删除文件权限-->
但有的权限可能会报Permission is only granted to system apps错误,导致权限申请失败,
原因是运行时权限:API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。在android6.0以前,我们程序需要的权限我们一般只需要在AndroidManifest.xml中直接更新就好,然而Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测。
如果你的程序在6.0以上的手机报权限的问题,简单粗暴最有效的解决方法是在工程下的build.gradle中的 targetSdkVersion 改为21或22,因为Android6.0系统或以上默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限。作者:Drc15H
链接:https://www.jianshu.com/p/1e6e9f9b2ef1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间比较旧,后续有时间可以新建一个空工程尝试一下,但就文件权限问题,可能还是使用最新版本的API较为合适,不然要去兼容旧版本,总是要有一些牺牲,很多功能性内容可能无法使用了。
其实最新版本的权限还算合理,安全性也较高,划分了公用外部存储,其实可以在公用外部存储空间自行创建目录,只不过以前习惯了根目录直接创建的方式,会有一些不习惯。
附:Android平台版本与API对照表
平台版本 | API 级别 | VERSION_CODE |
---|---|---|
Android 10.0 | 29 | Q |
Android 9 | 28 | Pie |
Android 8.1 | 27 | Oreo |
Android 8 | 26 | Oreo |
Android 7.1 | 25 | Nougat |
Android 7.0 | 24 | Nougat |
Android 6.0 | 23 | Marshmallow |
Android 5.1 | 22 | LOLLIPOP_MR1 |
Android 5.0 | 21 | LOLLIPOP |
Android 4.4W | 20 | KITKAT_WATCH |
Android 4.4 | 19 | KITKAT |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Android 4.2、4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.1、4.1.1 | 16 | JELLY_BEAN |
Android 4.0.3、4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.0、4.0.1、4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 2.3.3、2.3.4 | 10 | GINGERBREAD_MR1 |
Android 2.3、2.3.1、2.3.2 | 9 | GINGERBREAD |
Android 2.2.x | 8 | FROYO |
Android 2.1.x | 7 | ECLAIR_MR1 |
Android 2.0.1 | 6 | ECLAIR_0_1 |
Android 2.0 | 5 | ECLAIR |
Android 1.6 | 4 | DONUT |
Android 1.5 | 3 | CUPCAKE |
Android 1.1 | 2 | BASE_1_1 |
Android 1.0 | 1 | BASE |
Android10(Q,API-29)以上版本无法在存储卡目录创建文件夹的问题相关推荐
- Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1
Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1 + compileSdkVersion 29buildToolsVersion "29.0.2"d ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- 神马笔记 版本1.8.0——删除笔记/文件夹·技术细节篇
神马笔记 版本1.8.0--删除笔记/文件夹·技术细节篇 一.目标 二.体验地址 三.技术问题 1. 拖拽排序问题 2. indexOf问题 四.Finally 一.目标 记录开发过程中的2个技术问题 ...
- 神马笔记 版本1.8.0——删除笔记/文件夹·代码篇
神马笔记 版本1.8.0--删除笔记/文件夹·代码篇 一.目标 二.体验地址 三.功能设计 1. 实现删除功能 2. 处理最近删除的可见性 四.实现过程 1. 删除到最近删除 2. 从最近删除恢复 3 ...
- 怎样在hdfs上创建多级目录文件夹_【HDFS API编程】第一个应用程序的开发-创建文件夹...
/** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 HDFS API的操作了 * ...
- Android 10.0(Q api=29)适配
1.存储权限(分区存储) Android手机分为外部储存和内部储存 内部储存:/data 目录.一般我们使用getFilesDir() 或 getCacheDir() 方法获取本应用的内部储存路径,读 ...
- 与node16版本兼容的node-sass版本和sass-loader版本 C:\Users\wenxin\Desktop\新建文件夹\wl-admin\node_modules\node-sass
node-sass: node-sass@6.0.1 sass-loader: sass-loader@10.2.0
- 在android X(安卓10版本)运行创建父文件夹失败,解决办法
适配安卓X版本时,发现很多权限申请后无法达到应有的效果. 例如:申请了内存的读写权限,但是还是无法创建父文件夹. 查阅了一下开发文档: getExternalStorageDirectory()-在A ...
- python获取文件夹大小_S3 API for python–创建bucket文件夹统计文件夹大小
最近一直在跟S3打交道,但是苦于java不会,python懂一点,API这个东东经常听也知道是啥,但是没有实际根据API文档去进行相关开发的经历,所以前期一直很忐忑,都是找别人帮忙写好特定功能的程序, ...
- 虚拟环境命令+linux基本操作(各种版本查看+进程操作+目录+文件)
目录 一,虚拟环境 1,虚拟环境一些命令: 2,虚拟环境一些问题: 二,有关linux安装包 三,有关linux的一些基本操作 1,版本查看: 2,目录操作: 3,创建删除文件: 4,文件移动: 四, ...
最新文章
- 神奇的FireFox
- FPGA异步时序和多时钟模块
- 【剑指offer-Java版】19二叉树的镜像
- MediaWiki 1.19.2 发布 - 开源 Wiki 系统
- OpenCV cv :: Mat的串行输出功能的实例(附完整代码)
- 调整和改编赛车游戏——游戏屏幕
- vue中使用cookies和crypto-js实现记住密码和加密
- python 获取文件列表_Python3 - 获取文件夹中的文件列表
- ORACLE数据库导出导入数据
- JVM常用垃圾收集器
- Android实用笔记——使用ViewFlipper实现屏幕切换动画
- linux下搭建博客day4注册git账号
- 三个月备战,终获阿里offer
- 网络工程师 第8章 网络安全
- WPF打开pdf文件
- Javascript判断是否是ipad的浏览器
- 外盘期货分仓软件(如智星系统,信管家)等功能
- 百度地图标记点中添加echarts图表
- 最新CcPay多商户个人收款码支付系统源码+UI很不错
- FQDN是什么?DNS又是什么?NNTP又是什么
热门文章
- android:gravity与android:layout_gravity的区别,以及代码设置对应属性
- es5 html片段拼接,es5的 reduce怎样用在拼接html字符串??? - 社区 - 妙味课堂
- c++模板类_在 MCU 上使用 C++ 之模板类进阶与线性 Kalman 算法代码
- 下拉框只读的时候没有下拉图标_百度下拉框营销秘密是什么
- leetcode c++未初始化_LeetCode每日一题:填充每个节点的下一个右侧节点指针
- zynq processing system 参数设置_【正点原子FPGA连载】第六章自定义IP核-呼吸灯实验-领航者 ZYNQ 之嵌入式开发指南...
- 多个项目共用同一个redis_浅谈Redis分布式锁(上)
- rest风格使用两个变量_SpringBoot2.x系列教程|构建RESTful风格的API接口
- 使用Statement操作数据表的弊端
- centos安装cmake