遇到一个问题,在Android 11的系统下,FileOutputStream无法创建多层结构的目录,是因为Android11开始强制执行分区存储机制,其他的方式都没有太多的效果,下面是我的处理方式,可能你们不一定可以用,但是可以参考吧
//以下方法可以让android 11 也可以外部创建文件
//AndroidManifest.xml 声明
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
//android 11可以通过以下代码,授予所有文件的管理权限。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + App.ins().getPackageName()))
startActivityForResult(intent, REQUEST_CODE);
}
//获取权限的回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
//执行获取权限成功的回调,然后进行自己的操作,下面只是我假设的一个方法
writeFile();
} else {
//执行获取权限失败的回调,进行自己的操作
Toast.show("存储权限获取失败");
}
}
}