从Android 11(SDK_INT >= 30)开始,app如果读写外部存储器须申请权限android.permission.MANAGE_EXTERNAL_STORAGE
原先的:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
搭配在AndroidManifest.xml的application里面配置:
android:requestLegacyExternalStorage="true"
已失效。
新的解决方案:
首先在AndroidManifest.xml里面申请权限:
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
然后在上层Java代码的运行时判断,如果没有获得完全的外部存储器读写权限,则运行时申请:
if (Build.VERSION.SDK_INT >= 30) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivity(intent);
return;
}
}
/**
开始接着正常的写读写文件操作...
*
/