授予 ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION 后无法访问 OTG USB 密钥

问题描述 投票:0回答:1

我的手机是三星 A32 5G (SM-A326B/DS)。 Android 12,本机 ROM,SDK 31。

我需要从 2 个应用程序的 OTG USB 适配器读取文件:

  • 我的应用程序是一个安装程序。它安装一些 APK 并恢复外部 SD 卡或 OTG USB 设备的一些数据。
  • Termux应用程序,从github下载并修改以请求权限。

清单包括:

<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 返回“权限被拒绝”。
java android android-permissions usb-drive
1个回答
0
投票

您没有 /mnt/media_rw 的读取权限。

所有文件访问对其没有影响。

© www.soinside.com 2019 - 2024. All rights reserved.