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

适配安卓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”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kstar_Ming_闫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值