失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 在android X(安卓10版本)运行创建父文件夹失败 解决办法

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

时间:2021-01-28 21:32:38

相关推荐

在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”

如果觉得《在android X(安卓10版本)运行创建父文件夹失败 解决办法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。