问题描述
在android版本大于30时,部署的APP出现明明在manifest清单中罗列了需要的存储权限,也通过requestPermissions动态申请到了权限,到手机设置 - 应用管理 - 权限管理中查看,APP也赋予了相应存储权限,但是就是新建文件、创建文件夹失败。
以下权限已获取到:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
解决方案
描述
可以理解为,android版本大于30时,进一步收紧了存储权限,在获取WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE的同时,还要进行额外权限的请求,姑且这样理解吧。
解决方法
- 在manifest清单中
- 添加MANAGE_EXTERNAL_STORAGE权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- 在application节点新增旧的存储模式的申明
android:requestLegacyExternalStorage="true"
- APP初始化时Java处理,申请权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" +Login.this.getPackageName()));
startActivityForResult(intent, 190009);
}else{
startInit();
}
- 回调处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 190009){
if (Environment.isExternalStorageManager()) {
startInit();
} else {
Toast.makeText(Login.this, "请同意请求的权限,可尝试重新进入APP!", Toast.LENGTH_LONG).show();
}
}
}
新申请的权限会打开一个新的activity进行权限的申请,勾选后表示同意。
本文详细描述了在Android 11及以上版本中,如何处理应用无法写入外部存储的问题,包括添加MANAGE_EXTERNAL_STORAGE权限、manifest配置、Java代码动态请求及回调处理。解决方法涉及了新版本对存储权限的严格要求和应用权限管理的步骤。
时获取外部存储权限的方法&spm=1001.2101.3001.5002&articleId=123570366&d=1&t=3&u=cb32400e60ab4577b6a5e03d2318d049)
947

被折叠的 条评论
为什么被折叠?



