前景提要
APP的targetSdkVersion=28且正常获取了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,在Android11或12系统上用File API读写USB-OTG外接硬盘,会报crash:
java.lang.IllegalArgumentException: Invalid path: /mnt/media_rw/1EEF7FF39AE
搜索得知是Android11和12的bug,在Android13已经修复。那么如何让Android11和12也能正常读写呢?
解决问题
- manifest添加MANAGE_EXTERNAL_STORAGE权限
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
- 动态申请MANAGE_EXTERNAL_STORAGE权限
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);//Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
intent.setData(Uri.parse("package:" + context.getPackageName()));
startActivityForResult(intent,1);
- 重启应用,可以正常读写外接硬盘。