我有一种方法来获取连接到设备的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无法检测到ACTION_USB_ACCESSORY_DETACHED事件...我发现了问题所在
您是如何得到附件列表的,对我来说,它返回null。我正在尝试通过USB将PC连接到Android设备。有没有一种方法可以检测到这一点。我可以检测到USB连接,但是Accessorieslist或getdevices始终为null。