Android USB actions(ACTION_USB_DEVICE_ATTACHED & ACTION_USB_DEVICE_DETACHED) 在 BroadcastReceiver 中不起



我正在开发一个需要监听USB事件的应用程序(ACTION_USB_DEVICE_ATTACHED和ACTION_USB_DEVICE_DETACHED(。我创建了一个接收器来监听这些操作。但是当这些事件发生时,我的接收器不会启动。

安卓清单 :

<uses-feature android:name="android.hardware.usb.host" />
<receiver android:name=".USBEventReceiver">
            <intent-filter >
                <action android:name="android.hardware.usb.action.USB_STATE"/>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
                <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"/>
            </intent-filter>
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/usb_device"/>
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
                android:resource="@xml/usb_device"/>
 </receiver>

BroadCastReceiver onReceive 方法 :

public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
        UsbManager usbManager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
        if (intent.getExtras().getBoolean("connected")) {
            Log.d(TAG, "onReceive: connected");
        } else if (!intent.getExtras().getBoolean("connected")) {
            Log.d(TAG, "onReceive: disconnected");
        }
        if (usbManager != null) Log.d(TAG, "onReceive: " + usbManager.getDeviceList().toString());
        if (device != null) Log.d(TAG, "USB Attached: " + device);

        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            Log.d(TAG, "onReceive: " + device.getManufacturerName());
            Log.d(TAG, "onReceive: " + device.getProductName());
            Log.d(TAG, "onReceive: " + device.getSerialNumber());
            Log.d(TAG, "onReceive: " + device.getSerialNumber());
        } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            Log.d(TAG, "onReceive: " + device.getManufacturerName());
            Log.d(TAG, "onReceive: " + device.getProductName());
            Log.d(TAG, "onReceive: " + device.getSerialNumber());
        }
    }

这个问题很老了,但我仍然会试一试。为了让某些东西对这些USB命令采取行动,我使用了BroadCast接收器。```

private final Broadcast Receiver mUsbReceiver = 
    switch(intent.getAction() {
        case UsbService.ACTION_USB_ATTACHED:
           //do something
        case UsbService.ACTION_USB_DETACHED:
            //do something
'

''

您需要在此处注册接收器,例如:

private void setFilters() {
    IntentFilter filter = new IntentFilter();
    //New Service Filters
    filter.addAction(UsbService.ACTION_USB_ATTACHED);
    filter.addAction(UsbService.ACTION_USB_DETACHED);    
    registerReceiver(mUsbReceiver, filter);
}

最新更新