运行环境:华为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)以上版本无法在存储卡目录创建文件夹的问题相关推荐

  1. Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1

    Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1 + compileSdkVersion 29buildToolsVersion "29.0.2"d ...

  2. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  3. 神马笔记 版本1.8.0——删除笔记/文件夹·技术细节篇

    神马笔记 版本1.8.0--删除笔记/文件夹·技术细节篇 一.目标 二.体验地址 三.技术问题 1. 拖拽排序问题 2. indexOf问题 四.Finally 一.目标 记录开发过程中的2个技术问题 ...

  4. 神马笔记 版本1.8.0——删除笔记/文件夹·代码篇

    神马笔记 版本1.8.0--删除笔记/文件夹·代码篇 一.目标 二.体验地址 三.功能设计 1. 实现删除功能 2. 处理最近删除的可见性 四.实现过程 1. 删除到最近删除 2. 从最近删除恢复 3 ...

  5. 怎样在hdfs上创建多级目录文件夹_【HDFS API编程】第一个应用程序的开发-创建文件夹...

    /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 HDFS API的操作了 * ...

  6. Android 10.0(Q api=29)适配

    1.存储权限(分区存储) Android手机分为外部储存和内部储存 内部储存:/data 目录.一般我们使用getFilesDir() 或 getCacheDir() 方法获取本应用的内部储存路径,读 ...

  7. 与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

  8. 在android X(安卓10版本)运行创建父文件夹失败,解决办法

    适配安卓X版本时,发现很多权限申请后无法达到应有的效果. 例如:申请了内存的读写权限,但是还是无法创建父文件夹. 查阅了一下开发文档: getExternalStorageDirectory()-在A ...

  9. python获取文件夹大小_S3 API for python–创建bucket文件夹统计文件夹大小

    最近一直在跟S3打交道,但是苦于java不会,python懂一点,API这个东东经常听也知道是啥,但是没有实际根据API文档去进行相关开发的经历,所以前期一直很忐忑,都是找别人帮忙写好特定功能的程序, ...

  10. 虚拟环境命令+linux基本操作(各种版本查看+进程操作+目录+文件)

    目录 一,虚拟环境 1,虚拟环境一些命令: 2,虚拟环境一些问题: 二,有关linux安装包 三,有关linux的一些基本操作 1,版本查看: 2,目录操作: 3,创建删除文件: 4,文件移动: 四, ...

最新文章

  1. 神奇的FireFox
  2. FPGA异步时序和多时钟模块
  3. 【剑指offer-Java版】19二叉树的镜像
  4. MediaWiki 1.19.2 发布 - 开源 Wiki 系统
  5. OpenCV cv :: Mat的串行输出功能的实例(附完整代码)
  6. 调整和改编赛车游戏——游戏屏幕
  7. vue中使用cookies和crypto-js实现记住密码和加密
  8. python 获取文件列表_Python3 - 获取文件夹中的文件列表
  9. ORACLE数据库导出导入数据
  10. JVM常用垃圾收集器
  11. Android实用笔记——使用ViewFlipper实现屏幕切换动画
  12. linux下搭建博客day4注册git账号
  13. 三个月备战,终获阿里offer
  14. 网络工程师 第8章 网络安全
  15. WPF打开pdf文件
  16. Javascript判断是否是ipad的浏览器
  17. 外盘期货分仓软件(如智星系统,信管家)等功能
  18. 百度地图标记点中添加echarts图表
  19. 最新CcPay多商户个人收款码支付系统源码+UI很不错
  20. FQDN是什么?DNS又是什么?NNTP又是什么

热门文章

  1. android:gravity与android:layout_gravity的区别,以及代码设置对应属性
  2. es5 html片段拼接,es5的 reduce怎样用在拼接html字符串??? - 社区 - 妙味课堂
  3. c++模板类_在 MCU 上使用 C++ 之模板类进阶与线性 Kalman 算法代码
  4. 下拉框只读的时候没有下拉图标_百度下拉框营销秘密是什么
  5. leetcode c++未初始化_LeetCode每日一题:填充每个节点的下一个右侧节点指针
  6. zynq processing system 参数设置_【正点原子FPGA连载】第六章自定义IP核-呼吸灯实验-领航者 ZYNQ 之嵌入式开发指南...
  7. 多个项目共用同一个redis_浅谈Redis分布式锁(上)
  8. rest风格使用两个变量_SpringBoot2.x系列教程|构建RESTful风格的API接口
  9. 使用Statement操作数据表的弊端
  10. centos安装cmake