Android附件模式下的设备断开连接

时间:2016-07-21 07:46:13

标签: android usb accessory

是否可以以编程方式检测我的设备是否已断开连接(USB)?

我试图在配件模式应用程序中标记断开连接事件。 那有可能吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:0)

您可以使用BroadcastReceiver侦听UsbManager.ACTION_USB_DEVICE_DETACHED和UsbManager.ACTION_USB_DEVICE_ATTACHED事件。

<receiver android:name="UsbConnectionReceiver">
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED">
            </action>
        </intent-filter>
        <intent-filter>
            <action android:name="android.hardware.usb.action.ACTION_USB_DEVICE_DETACHED">
            </action>
        </intent-filter>
    </receiver>

或者您可以定期循环连接的设备(使用计时器或ScheduledExecutorService)检查您的设备是否在列表中。

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
UsbDevice device = deviceList.get("deviceName");

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
if (usbDeviceIsMyDevice(device)){
    // your code
}
}

答案 1 :(得分:0)

您可能将无法使用UsbManager.ACTION_USB_DEVICE_ATTACHUsbManagerACTION_USB_DEVICE_DETACH,因为UsbManager仅支持托管USB连接的Android。来自UsbManager的Android开发人员文档:

  

该类使您可以访问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()经常运行,您就可以及时检测到附件断开连接。