You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:25:19