适配安卓X版本时,发现很多权限申请后无法达到应有的效果。
例如:申请了内存的读写权限,但是还是无法创建父文件夹。
查阅了一下开发文档:
getExternalStorageDirectory()-在API级别29中不推荐使用此方法。为了提高用户隐私,不建议直接访问共享/外部存储设备。
当应用程序定位到Build.VERSION_CODES.Q时,此方法返回的路径不再可供应用程序直接访问。
通过迁移到Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT之类的替代方案,应用程序可以继续访问共享/外部存储中存储的内容。
getExternalFilesDir(null)将返回您的应用存储文件夹,位于(内部存储)/Android/data/your.app.name/file/
10.0之前的不变,所以需要做一下判断:
public static String getSDPath(Context context) {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);// 判断sd卡是否存在
if (sdCardExist) {
if (Build.VERSION.SDK_INT>=29){
//Android10之后
sdDir = context.getExternalFilesDir(null);
}else {
sdDir = Environment.getExternalStorageDirectory();// 获取SD卡根目录
}
} else {
sdDir = Environment.getRootDirectory();// 获取跟目录
}
return sdDir.toString();
}

Android 10 改变了文件的存储方式不允许应用随意创建文件夹了,要用安卓提供的文件夹。

Android 10提供了一些文件夹:

例如:Context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS),这个路径是在SD卡的Android目录下的data目录下的自己应用包下的files目录下的 Environment.XXX,Environment.XXX代表的意思如下图

解决办法:

1.使用android自带功能解决

2.把targetSdkVersion 改为29之下(如果你的 应用 compileSdkVersion 为29 并且targetSdkVersion为29,就会使用29的最新源码编译和运行,如果降低targetSdkVersion在系统源码运行的时候就会找到相应的targetSdkVersion版本的源码这样就相当于绕过了Android 10新特性。)

3.可以在Androidmainfest 里面的application添加:android:requestLegacyExternalStorage=“true”

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

  1. mysql 5.7版本目录无data文件夹的解决办法

    安装mysql 5.7+版本时,若发现因根目录下,缺少data文件夹的情况, ***请不要去拷贝其他版本的data文件夹!*** 因为此操作会出现很多潜在问题:比如我遇到的执行show variabl ...

  2. Windows 10无法扫描到电脑文件夹的解决办法

    办公室是一台理光Ricoh C3300的复印机,文件能扫描到其他电脑的文件夹且自动生成.pdf文件,就是不能扫描到Windows10的电脑上,网上查阅资料说是IP或是账户的问题,经过多次测试,发现Ri ...

  3. Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】

    2020-05-09-[12周-周四] Android动画 https://blog.csdn.net/zhangbijun1230/article/details/80262359 https:// ...

  4. Android写出资源到根目录,创建一个文件夹并将其写入android的根目录

    我不尝试在/ mnt / sdcard中写入外部sd.我正在尝试为可能的应用程序文件创建一个文件夹,并让其他人访问它们. 我有一个名为Libra的应用程序,该应用程序在导出数据时会生成.csv文件,并 ...

  5. Android配置----DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法...

    Android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹,问题在于data文件夹没有权限,用360手机助手或豌豆荚也是看不见的. 有以下两种解决方法: ...

  6. linux命令删除sh文件,Linux下面使用命令如何运行.sh文件的两种解决办法 删除windows.old文件夹的解决...

    延伸:删除windows.old文件夹的解决办法 描述:...行",这样就以管理员身份运行了cmd. 然后就很简单啦: 1 rd /S /Q c:\windows.old 注意,运行该命令后 ...

  7. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

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

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

  9. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

最新文章

  1. 一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)
  2. Linux上iptables防火墙的基本应用教程
  3. scala学习---2
  4. 论文笔记(eTrust: Understanding Trust Evolution in an Online World)
  5. 这所985大学决定:404名硕博研究生,退学处理!
  6. git pull和push整理和归纳
  7. 这是一个成长差异化的时代
  8. c语言学生管理系统write to a text file,语言编程学生成绩管理系统.doc
  9. S2SH新手框架结构的准备工作只需要导入这些文件
  10. windows系统bat批处理 电脑换IP清空dns地址 清空缓存重新获取ip
  11. Julia: rand
  12. java二进制运算符
  13. 按自己的思想写商业计划
  14. 计算机芯片的形成和发展,计算机中将cpu集成在一块芯片上所形成的元器件是什么...
  15. Bada学习-多任务模式
  16. 点估计与区间估计、置信区间、置信水平
  17. 崩坏35.4版本什么时候更新
  18. Unity 2D手游——坦克大战 C#
  19. AngularJS学习笔记-2
  20. 日语初级语法复习 Day 17 Summary(更新中)

热门文章

  1. 05-jQuery对象(CSS)
  2. 杭州服务器电销适合的系统,电销系统,可以这样用
  3. 情深不寿,强极则辱,谦谦君子,温…
  4. java程序读取excel表格并存入mysql数据库详细教程
  5. CentOS7yum安装mysql5.7.30
  6. 金融后台管理系统设计
  7. 【树莓派笔记】USB口供电能力
  8. 【Python】利用Python绘制3D图表
  9. 智能四向车立体库|拥有WMCWCSERP管理系统的HEGERLS托盘四向穿梭车AGV立体库
  10. java中将两数组拼接为一个数组