デバイスが切断されたかどうか (USB) をプログラムで検出することはできますか?
アクセサリ モード アプリケーションで切断イベントにフラグを立てようとしています。それで、それは可能ですか?はいの場合、どのように?
USB 接続をホストする Android のみをサポートしているため、UsbManager.ACTION_USB_DEVICE_ATTACH
またはを使用できない可能性があります。のAndroid開発者ドキュメントから:UsbManagerACTION_USB_DEVICE_DETACH
UsbManager
UsbManager
このクラスを使用すると、USB の状態にアクセスし、USB デバイスと通信できます。現在、パブリック API ではホスト モードのみがサポートされています。
Android アクセサリは、Android が USB 接続をホストすることを許可しませんが、接続されたデバイスでホストする必要があります。バックグラウンド サービスに次のカスタム メソッドを定期的に実行させることで、アプリケーションでアクセサリの切断を検出し、切断することができました。
void checkForAccessory(){
UsbAccessory[] deviceList = mUsbManager.getAccessoryList();
if (deviceList != null){
// My app checks if the device has already been initialized or if it needs to be initialized.
} else {
// Perform actions associated with a disconnect
}
}
checkForAccessory()
が頻繁に実行されている限り、アクセサリの切断をかなり最新の状態で検出できます。
ACTION_USB_ACCESSORY_DETACHED
API レベル 12 から存在していた が必要です。
BroadcastReceiver
次のようにa を登録するだけです。
val detachedFilter = IntentFilter(UsbManager.ACTION_USB_ACCESSORY_DETACHED)
context.registerReceiver(usbReceiver, detachedFilter)
は次のusbReceiver
ようになります。
object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (action == UsbManager.ACTION_USB_ACCESSORY_DETACHED) {
// Do something about it
}
}
}