0

デバイスが切断されたかどうか (USB) をプログラムで検出することはできますか?

アクセサリ モード アプリケーションで切断イベントにフラグを立てようとしています。それで、それは可能ですか?はいの場合、どのように?

4

3 に答える 3

0

USB 接続をホストする Android のみをサポートしているため、UsbManager.ACTION_USB_DEVICE_ATTACHまたはを使用できない可能性があります。のAndroid開発者ドキュメントから:UsbManagerACTION_USB_DEVICE_DETACHUsbManagerUsbManager

このクラスを使用すると、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()が頻繁に実行されている限り、アクセサリの切断をかなり最新の状態で検出できます。

于 2019-08-15T16:47:15.947 に答える
0

ACTION_USB_ACCESSORY_DETACHEDAPI レベル 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
        }
    }
}
于 2021-09-30T23:15:12.490 に答える