0

我有一种方法可以获取连接到设备的 USB 附件列表并更新usbAccessories适配器用于填充的列表集合ListView,即

private void updateUsbAccessories() {
    List<String> usbAccessories = new ArrayList<String>();

    UsbAccessory[] accessoryList = usbManager.getAccessoryList();

    if (accessoryList != null) {
        usbAccessories.add(accessoryList[0].getSerial());
    }

    // Notify adapter of changes
    myAdapter.notifyDataSetChanged();

}

当 USB 附件与设备分离时,我调用此方法BroadcastReceiver

class UsbReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        updateUsbAccessories();
    }
}

它用 action 监听意图过滤器ACTION_USB_ACCESSORY_DETACHED。问题是行为似乎非常间歇性,即有时当我分离设备时accessoryList.length = 1。当然,这应该总是返回null,因为没有连接任何 USB 附件。

任何想法为什么会发生这种情况?谢谢。

更新 我开始怀疑Android是否ACTION_USB_ACCESSORY_DETACHED在附件实际分离之前发送广播,即我在下面引入了一个小睡眠UsbReceiver

class UsbReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Thread.sleep(500);
            updateUsbAccessories();
        }
        catch (InterruptedException e) {} 
    }
}

有了这个小小的睡眠,我似乎无法重现这个问题。没有它,我只能假设我在附件实际分离之前调用getAccessoryList了方法updateUsbAccessories,尽管已经发送了广播。这真的是问题吗?如果是这样,我不确定 Android 何时发送ACTION_USB_ACCESSORY_DETACHED广播的实现。

4

1 回答 1

0

我和你有类似的问题,Android 没有检测到 ACTION_USB_ACCESSORY_DETACHED 事件......我发现了问题所在

最可能的问题是您的 USB 主机电源在 Android 可以将 ACTION_USB_ACCESSORY_DETACHED 发送到您的应用程序之前快速打开/关闭

解决方案 i)更改您的 USB 主机固件以在关闭后添加延迟,然后再次打开(可能 200 毫秒 - 对我有用) ii)按照您的建议在线程中添加延迟!

于 2014-01-20T09:40:56.550 回答