AndroidManifest.xml
增加权限:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
Application 代码增加:
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
Activity 的启动模式改成:(以下不必须,不管用可尝试)
android:launchMode="singleTask"
Java代码
动态申请权限增加:
Manifest.permission.MANAGE_EXTERNAL_STORAGE,
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_AUDIO,
Manifest.permission.READ_MEDIA_VIDEO,
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PermissionConstance.REQUEST_PERMISSION_CODE) {
if (grantResults.length > 0) {
List<String> deniedPermissionList = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (grantResult != PackageManager.PERMISSION_GRANTED) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
} else {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + this.getPackageName()));
startActivity(intent);
}
}
if (!deniedPermissionList.contains(permission)) {
deniedPermissionList.add(permission);
}
}
}
if (!deniedPermissionList.isEmpty()) {
for (String deniedPermission : deniedPermissionList) {
}
}
}
}
}
用 Environment.getExternalStorageDirectory() 替换 /sdcard