Android API29下OTG连接U盘的权限与路径访问问题求助
Android API 29 下OTG U盘访问权限配置指南
权限配置修正
移除无效权限
MANAGE_EXTERNAL_STORAGE是API 30(Android 11)才引入的权限,API 29环境下配置了也无效,直接删除。USB_PERMISSION用于USB设备的直接通信(如串口、自定义设备),并非U盘文件访问所需,可移除。
保留并补充必要配置
清单文件中保留基础存储权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />同时在
application标签下添加属性,禁用API 29默认的分区存储限制:<application ... android:requestLegacyExternalStorage="true"> ... </application>
正确获取U盘路径的方法
硬编码路径的方式不可靠,Android中可移动存储的路径是动态分配的,应该通过StorageManager API获取:
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE); List<StorageVolume> storageVolumes = storageManager.getStorageVolumes(); for (StorageVolume volume : storageVolumes) { // 判断是否为可移动存储(U盘) if (volume.isRemovable()) { // 获取访问路径 String volumePath = volume.getDirectory() != null ? volume.getDirectory().getAbsolutePath() : ""; // 后续可基于此路径进行文件操作 } }
权限申请注意事项
- 除清单配置外,需动态申请
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,因为它们属于危险权限,必须通过弹窗让用户授权。 - 即使授权成功,部分设备可能仍需用户手动在系统设置中开启应用的"存储"权限,或确认U盘的访问授权。
内容的提问来源于stack exchange,提问作者Yui_iuY
相关产品推荐
相关产品推荐

