我的手机是三星 A32 5G (SM-A326B/DS)。 Android 12,本机 ROM,SDK 31。
我需要从 2 个应用程序的 OTG USB 适配器读取文件:
清单包括:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
为了在java代码中请求,我尝试了两种方法:
第一种方法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
CTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION");
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
String name = getPackageName();
Uri uri = Uri.fromParts("package", name, null);
intent.setData(uri);
startActivity(intent);
}
}
第二种方法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!getPackageManager().canRequestPackageInstalls()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivityForResult(intent, 501);
}
}
在两个应用程序中,问题是授权在请求授权的 Activity 内没有生效。 即使我用 finish() 结束我的活动并再次启动我的应用程序,我也没有访问权限。 但是,如果我用任务管理器终止我的应用程序并启动该应用程序,我就得到了正确的结果。 但是,当我使用任务管理终止我的应用程序并再次启动它时,我会访问 USB 加密狗。
在这两个应用程序中,要访问 ISB 密钥,我使用 Linux 命令。
mount
命令检查 Android 是否可以识别 USB 加密狗。USBPATH=$(grep -E "^[^ ]+ /mnt/media_rw/[A-Z0-9]{4}-[A-Z0-9]{4} " /proc/mounts | cut -d' ' -f2)
我得到了加密狗的路径ls $USBPATH
我发现我没有权利,即使在授予 MANAGE_EXTERNAL_STORAGE 之后,因为 ls 返回“权限被拒绝”。您没有 /mnt/media_rw 的读取权限。
所有文件访问对其没有影响。