Flutter中如何读取USB OTGU盘数据?遇到Serial设备相关异常
解决Flutter读取USB OTG U盘时的"Not an Serial device"错误
这个错误的核心原因很明确:你用了专门针对串口设备的USB库(比如usb_serial)来访问U盘,但U盘属于大容量存储设备,根本不是串口设备,所以触发了这个异常。
解决思路&步骤
1. 换用正确的库
放弃串口类库,改用专门处理USB大容量存储的Flutter库,比如usb_storage。
首先在pubspec.yaml里添加依赖:
dependencies: usb_storage: ^最新版本号 # 替换成pub上的最新版本
2. 配置权限
在Android项目的AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.USB_PERMISSION" /> <uses-feature android:name="android.hardware.usb.host" />
代码里还要动态申请USB访问权限,确保应用能获取到U盘的访问权限。
3. 示例代码实现
import 'package:usb_storage/usb_storage.dart'; import 'dart:io'; Future<void> readUsbDriveContent() async { // 获取已连接的USB存储设备列表 List<UsbStorageDevice> devices = await UsbStorage.getStorageDevices(); if (devices.isEmpty) { print("未检测到USB存储设备"); return; } var targetDevice = devices.first; // 请求设备访问权限 bool hasPermission = await UsbStorage.requestPermission(targetDevice); if (!hasPermission) { print("未获得USB设备访问权限"); return; } // 获取U盘的根路径 String rootPath = await UsbStorage.getStoragePath(targetDevice); // 读取根目录下的test.txt文件示例 try { File testFile = File('$rootPath/test.txt'); String content = await testFile.readAsString(); print("文件内容:$content"); } catch (e) { print("读取文件失败:$e"); } }
4. 额外注意点
- 确认你的Android设备支持USB OTG功能,并且已经开启了OTG模式
- 优先使用FAT32格式的U盘,部分Android设备对NTFS格式的支持有限,可能需要额外处理
- 不要同时混用串口库和USB存储库,避免底层冲突
内容的提问来源于stack exchange,提问作者Vijay Lodhi
相关产品推荐
相关产品推荐

