UniApp USB存储设备U盘操作、读写原生插件

这是一个用于在UniApp中操作USB存储设备的原生插件,支持USB设备检测、文件读写、目录操作等功能。

安装与配置

1. 插件注册

在项目中引入插件:

javascript 复制代码
let usbDrive = uni.requireNativePlugin('usbDrive');

2. 权限配置

确保在AndroidManifest.xml中添加以下权限:

xml 复制代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.usb.host" />

API接口说明

1. registerUsbStateReceiver(callback)

注册USB设备插拔监听器

参数:

  • callback: 回调函数,接收设备插拔事件

示例:

javascript 复制代码
usbDrive.registerUsbStateReceiver((result) => {
    console.log('USB设备状态:', result);
});

2. checkAllFilesAccessPermission(callback)

检查并请求所有文件访问权限(Android 11+)

参数:

  • callback: 回调函数

示例:

javascript 复制代码
usbDrive.checkAllFilesAccessPermission((result) => {
    console.log('权限检查结果:', result);
});

3. getUsbDriveDeviceList(callback)

获取USB设备列表

参数:

  • callback: 回调函数,返回设备列表信息

返回数据:

json 复制代码
{
  "success": true,
  "data": [
    {
      "deviceId": 1,
      "deviceName": "USB Mass Storage Device",
      "productName": "Storage Device",
      "manufacturerName": "Generic",
      "vendorId": 1234,
      "productId": 5678,
      "index": 0
    }
  ]
}

4. initUsbStorage(deviceIndex, callback)

初始化指定的USB存储设备

参数:

  • deviceIndex: 设备索引
  • callback: 回调函数

示例:

javascript 复制代码
usbDrive.initUsbStorage(0, (result) => {
    if (result.success) {
        console.log('初始化成功');
    }
});

5. getUsbFileList(path, callback)

获取指定路径下的文件列表

参数:

  • path: 目录路径
  • callback: 回调函数

返回数据:

json 复制代码
{
  "success": true,
  "data": [
    {
      "name": "example.txt",
      "path": "/example.txt",
      "isDirectory": false,
      "size": 1024
    },
    {
      "name": "Documents",
      "path": "/Documents",
      "isDirectory": true,
      "size": 0
    }
  ]
}

6. readTextFile(filePath, callback)

读取文本文件内容

参数:

  • filePath: 文件路径
  • callback: 回调函数

7. writeTextFile(filePath, content, callback)

写入文本文件

参数:

  • filePath: 文件路径
  • content: 文件内容
  • callback: 回调函数

8. createUsbDirectory(dirPath, callback)

创建目录

参数:

  • dirPath: 目录路径
  • callback: 回调函数

9. copyLocalFileToUsb(localFilePath, usbFilePath, callback)

复制本地文件到U盘

参数:

  • localFilePath: 本地文件路径
  • usbFilePath: U盘目标路径
  • callback: 回调函数

10. copyUsbFileToLocal(usbFilePath, localFilePath, callback)

复制U盘文件到本地

参数:

  • usbFilePath: U盘文件路径
  • localFilePath: 本地目标路径
  • callback: 回调函数

11. releaseResources(callback)

释放USB设备资源

参数:

  • callback: 回调函数

使用示例

基本使用流程

javascript 复制代码
export default {
    data() {
        return {
            devices: [],
            selectedDeviceIndex: -1,
            isStorageInitialized: false,
            files: [],
            currentPath: "/"
        }
    },
    methods: {
        // 1. 获取设备列表
        getUsbDevices() {
            usbDrive.getUsbDriveDeviceList((result) => {
                if (result.success) {
                    this.devices = result.data;
                }
            });
        },
        
        // 2. 初始化设备
        initUsbStorage() {
            usbDrive.initUsbStorage(this.selectedDeviceIndex, (result) => {
                if (result.success) {
                    this.isStorageInitialized = true;
                }
            });
        },
        
        // 3. 获取文件列表
        getFileList() {
            usbDrive.getUsbFileList(this.currentPath, (result) => {
                if (result.success) {
                    this.files = result.data;
                }
            });
        },
        
        // 4. 读取文件
        readTextFile() {
            const filePath = "/example.txt";
            usbDrive.readTextFile(filePath, (result) => {
                if (result.success) {
                    console.log('文件内容:', result.data);
                }
            });
        }
    }
}

注意事项

  1. 权限管理:在Android 11及以上版本需要申请所有文件访问权限
  2. 异步操作:所有操作都是异步的,请正确处理回调
  3. 资源释放:使用完毕后应调用[releaseResources](file://D:\WorkCode\uniapp-native-plugin\libuvccamera\src\main\java\com\herohan\uvcapp\VideoCapture.java#L479-L488)释放资源
  4. 错误处理:每个回调都包含success字段,需判断操作是否成功
  5. 路径格式:所有路径应以"/"开头

常见问题

1. 设备连接后无法识别

  • 检查USB OTG功能是否开启
  • 确认设备供电是否充足
  • 验证设备是否支持大容量存储协议

2. 文件操作失败

  • 确认设备已正确初始化
  • 检查文件路径是否正确
  • 验证是否有足够的存储空间

3. 权限问题

  • Android 11以上需要特殊权限处理
  • 确保应用有读写外部存储权限
  • 检查USB设备访问权限是否已授予
相关推荐
Rysxt_16 小时前
uni-app x 教程:下一代跨平台开发框架
uni-app·uni-app x
游戏开发爱好者820 小时前
2025年iOS应用上架App Store全指南,开发者必看
android·ios·小程序·https·uni-app·iphone·webview
集成显卡21 小时前
CVE检索工具 | 开发一款检索漏洞信息的小程序
网络安全·小程序·uni-app·cve·漏洞信息
jaqi.l1 天前
uni-app 小程序全局挂载分享功能,并动态配置页面是否可以分享
vue.js·小程序·uni-app
2501_915106321 天前
HBuilderX 项目上架 iOS app上架 App Store 的关键流程
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
iOS 文件管理,在不越狱的前提下管理 iPhone / iPad 文件
android·ios·小程序·uni-app·iphone·webview·ipad
能c能v1 天前
uniapp+JPush(极光推送) 华为厂商离线接收不到通知问题。
华为·uni-app
万物得其道者成1 天前
uni-app 触底加载和下拉刷新完整实现指南
uni-app
酒醉的胡铁1 天前
uniapp运行到鸿蒙没有反应或者一直运行方式:打开 undefined, 导入 dist\dev\.app-harmony 运行
华为·uni-app·harmonyos
tianxinw1 天前
uniapp x + vue3 实现echarts图表
前端·uni-app·vue·echarts