2017-03-21 48 views
1

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

Android清单:

<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> 

广播接收器的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()); 
     } 

    } 
+0

难道你得到解决吗? – RohitMat

+0

@RohitMat是的,我确实得到了一个。 –

回答

0

这个问题是老了,但我还是会采取刺伤它。为了让这些USB命令有一些操作,我使用了BroadCast Receiver。 ```

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); 
}