求助:HarmonyOS鸿蒙Next中USB设备获取不到name

求助:HarmonyOS鸿蒙Next中USB设备获取不到name 平板系统是3.0.0SDKAPi8,用的arkTs开发获取到usb列表后,获取name,返回undefined,获取不到name就没办法请求权限,换了设备也是一样的。但是我用安卓代码连接usb能获取到name

日志:截图

日志截图


更多关于求助:HarmonyOS鸿蒙Next中USB设备获取不到name的实战教程也可以访问 https://www.itying.com/category-93-b0.html

22 回复

换了api9,平板系统是4.0,

usb.getDevices()获取到的,configs是空
{
"name":"/dev/bus/usb/001/002",
"serial":"CC3C9C11847CC3D9",
"manufacturerName":"Aisino ",
"productName":"USB Flash Disk",
"version":"1.00",
"vendorId":43981,
"productId":4096,
"clazz":0,
"subClass":0,
"protocol":0,
"devAddress":2,
"busNum":2,
"configs":[]
}

更多关于求助:HarmonyOS鸿蒙Next中USB设备获取不到name的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


商讨之后的答复具体如下:

安卓是原生的

能直接获取到

参考这个里面的getdevicename方法

image.png

API8 arkTs 怎么直接调 UsbManager 啊大佬,

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

你看看API8能不能调import usb from "@ohos.usbManager";,如果不行的话就只能用API9了,这也是目前能想到的最好的解决方案了,

API8调不了,API9不兼容3.0系统的手机啊,要完全放弃3.0吗

具体的可以参照这个考虑

| busNum | number | 是 | 总线地址。 | | devAddress | number | 是 | 设备地址。 | | serial | string | 是 | 序列号。 | | name | string | 是 | 设备名字。 | | manufacturerName | string | 是 | 产商信息。 | | productName | string | 是 | 产品信息。 | | version | string | 是 | 版本。 | | vendorId | number | 是 | 厂商ID。 | | productId | number | 是 | 产品ID。 | | clazz | number | 是 | 设备类。 | | subClass | number | 是 | 设备子类。 | | protocol | number | 是 | 设备协议码。 | | configs | Array<USBConfiguration> | 是 | 设备配置描述符信息 |

开发文档上写的 let deviceName = deviceList[0].name; // 申请操作指定的device的操作权限。 usb.requestRight(deviceName).then(hasRight => 但是这个name是null,

就算我手动给name值,'/dev/bus/usb/001/002',能弹出权限框,但是下一步usb.connectDevice(device);就会失败。

好的我再给您看下,

基本信息

  • 姓名: 张三
  • 年龄: 30
  • 职业: 软件工程师

图片描述

  • 技能:
    • Python
    • Java
    • C++

那有类似于这个的配置吗?

let devicesList = usb.getDevices();
console.log(`devicesList = ${devicesList}`);

//devicesList 返回的数据结构

//此处提供一个简单的示例,如下

[
  {
    name: "1-1",
    serial: "",
    manufacturerName: "",
    productName: "",
    version: "",
    vendorId: 7531,
    productId: 2,
    clazz: 9,
    subClass: 0,
    protocol: 1,
    devAddress: 1,
    busNum: 1,
    configs: [
      {
        id: 1,
        attributes: 224,
        isRemoteWakeup: true,
        isSelfPowered: true,
        maxPower: 0,
        name: "1-1",
        interfaces: [
          {
            id: 0,
            protocol: 0,
            clazz: 9,
            subClass: 0,
            alternateSetting: 0,
            name: "1-1",
            endpoints: [
              {
                address: 129,
                attributes: 3,
                interval: 12,
                maxPacketSize: 4,
                direction: 128,
                number: 1,
                type: 3,
                interfaceId: 0,
              },
            ],
          },
        ],
      },
    ],
  },
]

USB Flash Disk
Manufacturer: Aisino
Product ID: 4096
Vendor ID: 43981
Device Name: /dev/bus/usb/001/002
Serial Number: NULL_SerialNumber
Version: 1.00

那看看试下这个结构呢,

  • 项目名称: 示例项目
  • 项目状态: 进行中
  • 开始日期: 2023-01-01
  • 结束日期: 2023-12-31

usb.connectDevice(deviceList[0]) 会失败的,

这是java API7的代码截图

java代码截图.jpg

我刚才试了用java API7可以正常获取到usbDevice的name,并且可以申请连接权限。

但是arkTs API8不行,还是获取不到usbDevice的name

arkTs APi8代码截图

代码截图

能提供下具体的代码吗楼主,方便我们分析您的问题

姓名:张三 职位:软件工程师 简介:拥有超过10年的IT行业经验,擅长解决复杂问题和团队领导。

我使用安卓,获取到name后,在鸿蒙项目中写

usb.requestRight('/dev/bus/usb/001/002')

能弹出权限框,连接上usb设备,然后发送读取就报错了

name=null,devAddress=null,为什么啊

在HarmonyOS鸿蒙Next中,USB设备获取不到name的问题可能与以下几个因素有关:

  1. USB设备描述符问题:USB设备的name信息通常存储在设备的描述符中。如果描述符未正确提供或解析失败,可能导致无法获取name。检查设备描述符是否正确,特别是字符串描述符部分。

  2. 权限问题:确保应用已获取访问USB设备的权限。在HarmonyOS中,访问USB设备需要声明相应的权限,并在运行时动态请求。

  3. 驱动兼容性:某些USB设备可能需要特定的驱动程序才能正确识别和获取信息。检查设备是否与HarmonyOS兼容,或是否需要额外的驱动支持。

  4. API使用问题:确认使用的API是否正确。HarmonyOS提供了UsbManager等API来管理USB设备,确保调用API时参数和流程正确。

  5. 系统版本差异:不同版本的HarmonyOS可能在USB设备管理上有差异,确认问题是否与系统版本相关。

  6. 设备状态:确保USB设备已正确连接并处于可用状态。设备未正确连接或处于异常状态可能导致无法获取name。

  7. 日志分析:通过查看系统日志或调试信息,进一步定位问题原因。日志中可能包含设备识别失败的具体错误信息。

以上是可能导致USB设备获取不到name的常见原因,需根据具体情况进行排查。

在HarmonyOS鸿蒙Next中,如果USB设备无法获取到name,可能是由于以下原因:

  1. 权限问题:确保应用已获取访问USB设备的权限。在config.json中声明ohos.permission.USB权限,并在运行时动态申请。

  2. 设备描述符问题:检查USB设备的描述符是否正确。使用UsbManager获取设备信息,确保设备已正确连接并被识别。

  3. 驱动问题:确认设备驱动已正确安装,设备在系统中可被识别。

  4. 代码问题:检查代码中获取设备名称的逻辑,确保正确调用UsbDevice.getName()方法。

建议逐步排查以上问题,确保设备连接和权限配置正确。

回到顶部