getAccessoryList当USB分离时不返回null

问题描述 投票:0回答:2

我有一种方法来获取连接到设备的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();

}

[使用BroadcastReceiver将USB附件从设备上卸下时,我称此方法

class UsbReceiver extends BroadcastReceiver {

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

它将通过操作ACTION_USB_ACCESSORY_DETACHED监听意图过滤器。问题是行为似乎是间歇性的,即有时在我卸下设备accessoryList.length = 1时。由于没有连接任何USB附件,因此肯定应该总是返回null

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

更新我开始怀疑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广播。

我有一种方法来获取连接到设备的USB附件的列表,并更新列表集合usbAccessories,适配器使用该列表集合来填充ListView,即,私有void ...

android usb
2个回答
0
投票

我也遇到类似的问题,即Android无法检测到ACTION_USB_ACCESSORY_DETACHED事件...我发现了问题所在


0
投票

您是如何得到附件列表的,对我来说,它返回null。我正在尝试通过USB将PC连接到Android设备。有没有一种方法可以检测到这一点。我可以检测到USB连接,但是Accessorieslist或getdevices始终为null。

© www.soinside.com 2019 - 2024. All rights reserved.