Android 11明基交互平板无法打开目录的问题求助
问题解决指南
一、解决ACTION_OPEN_DOCUMENT_TREE的ActivityNotFoundException异常
你的错误是因为系统中没有能处理该Intent的应用,大概率是系统自带的「文件管理」(Files)应用被禁用,激活步骤如下:
- 打开设备「设置」,进入「应用管理」(或「应用和权限」→「应用列表」)
- 在应用列表中找到「文件管理」(或命名为Files)
- 进入应用详情页,点击「启用」按钮(若之前为禁用状态)
- 重启你的应用后重新测试代码
Android系统默认依赖系统文件管理应用处理SAF的目录选择Intent,启用后即可正常响应ACTION_OPEN_DOCUMENT_TREE请求。
二、Android 11+不使用SAF读取USB设备数据的方法
方法1:USB Host API(直接与USB设备通信)
适合需要直接访问USB外设的场景,步骤如下:
- 声明权限
在AndroidManifest.xml中添加:
<uses-feature android:name="android.hardware.usb.host" android:required="false" /> <uses-permission android:name="android.permission.USB_PERMISSION" />
- 请求USB设备权限
通过UsbManager获取已连接的USB设备列表,向目标设备发起权限请求:
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList(); UsbDevice targetDevice = ...; // 从列表中选择目标USB存储设备 PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.your.package.USB_PERMISSION"), 0); usbManager.requestPermission(targetDevice, permissionIntent);
- 读取设备数据
获取权限后,通过UsbDeviceConnection和UsbInterface建立连接,解析USB存储的文件系统(需自行处理FAT32/NTFS等格式,可借助第三方文件系统解析库)。
方法2:MANAGE_EXTERNAL_STORAGE权限(全局文件访问)
仅适用于具备文件管理功能的应用,需注意该权限需Google Play特殊审核:
- 声明权限
在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:minSdkVersion="30" />
- 引导用户开启权限
if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); }
开启后可直接通过File API访问USB挂载路径(通常为/storage/usb0/、/storage/usbdisk/等,不同设备路径可能有差异)。
内容的提问来源于stack exchange,提问作者Ayush Sharma
相关产品推荐
相关产品推荐

