授予MANAGE_EXTERNAL_STORAGE权限后无法访问OTG USB Key的问题
问题:Android 12下授权MANAGE_EXTERNAL_STORAGE后需杀进程才能访问OTG设备
设备与应用背景
- 设备:三星A32 5G(SM-A326B/DS),搭载Android 12原生ROM,SDK版本31
- 涉及两个应用:
- 自定义安装器应用:用于APK安装及从外部SD卡/OTG设备恢复数据
- 修改自GitHub的Termux应用:已配置权限请求逻辑
权限配置
已在应用清单中添加权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
权限请求代码尝试
第一种实现
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { 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中权限不生效,无法访问OTG加密狗
- 即使关闭Activity并重启应用,仍无法访问OTG设备
- 只有通过任务管理器彻底杀死应用进程后,重新启动才能正常访问OTG加密狗
Linux命令测试情况
通过命令行验证设备状态与权限:
- 执行
mount命令确认Android已识别OTG加密狗 - 通过以下命令获取挂载路径:
USBPATH=$(grep -E "^[^ ]+ /mnt/media_rw/[A-Z0-9]{4}-[A-Z0-9]{4} " /proc/mounts | cut -d' ' -f2) - 执行
ls $USBPATH时提示permission denied,即使已授权MANAGE_EXTERNAL_STORAGE权限仍无法访问
内容的提问来源于stack exchange,提问作者Coilhac
相关产品推荐
相关产品推荐

