2017-03-21 1 views
1

USB 이벤트 (ACTION_USB_DEVICE_ATTACHED &ACTION_USB_DEVICE_DETACHED)에서 수신 대기해야하는 앱에서 작업하고 있습니다. 나는이 행동들을 경청하는 수신기를 만들었다. 그러나 내 수신기는 이러한 사건이 발생할 때 발포하지 않습니다.BroadcastReceiver에서 Android 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> 

브로드 캐스트 리시버 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); 
} 
관련 문제