HarmonyOS 鸿蒙Next usbManager.openAccessory打开后 closeAccessory没有被关闭下次无法正常打开配件

HarmonyOS 鸿蒙Next usbManager.openAccessory打开后 closeAccessory没有被关闭下次无法正常打开配件

usbManager.openAccessory打开设备后,没有调用closeAccessory关闭,手机端会一直残留没有正确关闭的Accessory。

@Concurrent
export async function AoaTask2() {
  let handle: usbManager.USBAccessoryHandle | null = null;
  let aoaDevice: usbManager.USBAccessory | null = null;

  if (!config.isPlugin) {
    config.isPlugin = true;
    while (config.isPlugin) { // usb设备已连接
      try {
        let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
        if (accList.length == 0) {
          continue;
        }
        aoaDevice = accList[0];
        let flag = await usbManager.requestAccessoryRight(aoaDevice)
        handle = usbManager.openAccessory(aoaDevice)
        while (config.isPlugin) {
          MyLog("读取文件中")
        }
        usbManager.closeAccessory(handle)
        MyLog(`closeAccessory success`);
      } catch (error) {
        MyLog(`openAccessory error ${error.code}, message is ${error.message}`)
        if (handle != null) {
          usbManager.closeAccessory(handle);
        }
      }
    }
    MyLog(`finish success`);
  }
}

使用上述代码在usbManager.openAccessory打开后,通过循环读取设备的内容过程中,应用通过任务面板一键杀死后,usbManager.closeAccessory没有被正确的关闭,再次进入应用报错,BusinessError 14401003:Cannot reopen the accessory.Cannot reopen accessory,无法重新打开配件。通过关闭usb设备(拔出usb设备),调用usbManager.getAccessoryList()方法后,还是能够显示上一个连接的设备,但此时设备已经拔出,手机端会一直保留上次没有正确关闭的Accessory,导致重新连上usb设备也继续报Cannot reopen accessory,只能重启手机才能让手机不保留上次没有正确关闭的Accessory,请问该如何解决closeAccessory没被调用,Accessory无法正常释放问题?


更多关于HarmonyOS 鸿蒙Next usbManager.openAccessory打开后 closeAccessory没有被关闭下次无法正常打开配件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

再打开前先检测一下是不是已经打开了,已经打开的话先关闭一下是否可解决问题,先执行下如下代码

let accList: usbManager.USBAccessory[] = usbManager.getAccessoryList()
if (accList.length != 0) {
  aoaDevice = accList[0];
  let flag = await usbManager.requestAccessoryRight(aoaDevice)
  handle = usbManager.openAccessory(aoaDevice)        
  usbManager.closeAccessory(handle)
}

更多关于HarmonyOS 鸿蒙Next usbManager.openAccessory打开后 closeAccessory没有被关闭下次无法正常打开配件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,usbManager.openAccessory用于打开USB配件,而closeAccessory用于关闭已打开的USB配件。如果在调用openAccessory后未正确调用closeAccessory,可能会导致资源未释放,从而在下一次尝试打开配件时失败。

具体来说,openAccessory会占用系统资源,包括文件描述符和USB接口等。如果这些资源未被释放,系统可能会认为配件仍然被占用,导致后续的openAccessory调用失败。因此,确保在每次openAccessory后调用closeAccessory是必要的。

示例代码片段如下:

let usbManager = ...; // 获取usbManager实例
let accessory = usbManager.openAccessory(...); // 打开USB配件

// 使用USB配件进行操作

usbManager.closeAccessory(accessory); // 关闭USB配件

如果未调用closeAccessory,可能会导致以下问题:

  1. 资源泄漏,系统资源被占用。
  2. 下次调用openAccessory时,系统可能返回错误或无法正常打开配件。

确保在每次使用完USB配件后调用closeAccessory,以释放相关资源,避免后续操作失败。

回到顶部