デバイスに接続されている USB アクセサリのリストを取得しusbAccessories
、アダプタが使用する List Collection を更新するメソッドがあります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
これは本当に問題でしょうか?ACTION_USB_ACCESSORY_DETACHED
もしそうなら、ブロードキャストを送信するタイミングの Android の実装についてはわかりません。