无法接收UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED的广播意图

我最近编写了一个USB主机应用程序,但是因为无法检测到设备连接/分离事件,所以被拦截,我按照http://developer.android.com/guide/topics/connectivity/usb/host .html并参考networking中的其他编码,经过几次检查,我仍然找不到问题。 我的debugging后,似乎UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED意图没有发生,因为我尝试使用Context.sendBroadcast()发送一个定制的意图,我的BroadcastReceiver可以接收意图。 但是当我连接/分离USB设备时,BroadcastReceiver不运行。 我使用的手机是HTC One-X,我相信OTGfunction是正确的,因为鼠标function正常工作。 这是我的代码片。

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.launcher); mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE); if(mUsbManager == null) { Log.d(TAG, "mUsbManager is null"); } // listen for new devices IntentFilter filter = new IntentFilter(); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); // filter.addAction("MyTest"); registerReceiver(mUsbReceiver, filter); } 

BroadcastReceiver

 BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { Log.d(TAG, "mUsbReceiver.onReceive start"); String action = intent.getAction(); UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { setDevice(device); } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { if (mDevice != null && mDevice.equals(device)) { setDevice(null); } } } }; 

的Manifest.xml

 <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> <uses-sdk android:minSdkVersion="12" /> <application> <activity android:name=".USBActivity" android:label="USBActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- <receiver android:name=".mUsbReceiver"> --> <intent-filter> <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/device_filter" /> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" android:resource="@xml/device_filter" /> <!-- </receiver> --> </activity> </application> 

在res / xml中的device_filter,所有3个设置都被尝试和禁止使用:

  <?xml version="1.0" encoding="utf-8"?> <resources> <!-- iCooby mouse --> <!-- <usb-device vendor-id="15d9" , /> --> <!-- <usb-device vendor-id="5593" product-id="2637"/> --> <usb-device /> </resources> 

如果有人知道发生了什么? 或告诉我如何检测广播意图是否有效,非常感谢。

Solutions Collecting From Web of "无法接收UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED的广播意图"

也许有点迟,但可能会帮助别人。 刚刚解决了检测USB设备插入类似的问题。 事实certificate – 因为你在清单中指定了一个意图filter – 当某个东西插入时,Android调用onResume。你可以尝试添加:

 @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); if (intent != null) { Log.d("onResume", "intent: " + intent.toString()); if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { // Do your thing ... } 

那么你也不需要在onCreate()调用registerReceiver() onCreate() 。 请注意,意图filter中的ID是十进制的。 所以你将不得不像“lsusb”这样的命令行工具来显示值。

接收器标签已被注释掉,我猜你知道,但只是incase。 另外它应该被声明为<receiver android:name="mUsbReceiver">你有一个'。' 这不需要在那里