我有一种方法可以获取连接到设备的 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
广播的实现。