Reputation: 87
I'm working on a App which has a requirement to listen on USB events (ACTION_USB_DEVICE_ATTACHED & ACTION_USB_DEVICE_DETACHED). I have created a receiver which listens on the these actions. But my receiver is not firing up when any of these events occur.
Android Manifest :
<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 method :
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());
}
}
Upvotes: 3
Views: 4789
Reputation: 125
This question is old but I'll still take a stab at it. In order to have something take action on these USB commands, I used a BroadCast Receiver. ```
private final Broadcast Receiver mUsbReceiver =
switch(intent.getAction() {
case UsbService.ACTION_USB_ATTACHED:
//do something
case UsbService.ACTION_USB_DETACHED:
//do something
```
Where you need to register your receiver with something like:
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);
}
Upvotes: 3