USB_DEVICE_ATTACHED只启动Galaxy S3 ICS的活动

最近我一直在试图接收意图android.hardware.usb.action.USB_DEVICE_ATTACHED使用广播接收器的所有样本和我见过的例子。

我已经在清单中宣布了一个接收者。

<receiver android:name=".UsbDeviceReceiver"> <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/> 

我也做了类似的活动代码 – onStart和OnStop注册/注销接收器。

  IntentFilter filter = new IntentFilter(); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); registerReceiver(mUsbReceiver, filter); 

但是,我发现意图只是被抓住了。 观察logcat我可以看到,附加USB设备寻找活动开始,而分离广播的detatch意图。 根据上述样本,情况并非如此。

我在元数据上缺less一些激进的东西吗? 我完全没有问题的android.hardware.usb.action.USB_DEVICE_DETACHED。 也许这是一个安装在Galaxy S3上的android版本的bug? 也许这是一个ICS的function。

任何相关信息都是值得欢迎的!

Solutions Collecting From Web of "USB_DEVICE_ATTACHED只启动Galaxy S3 ICS的活动"

这是一个已知的缺陷:

http://code.google.com/p/android/issues/detail?id=25701

和这里:

http://code.google.com/p/android/issues/detail?id=25703

但别屏住呼吸等待它被修复。 在查看错误报告的同时,将其显示出来,以便您能得到有关报告更新的通知。 可能会有其他人的意见要求修正。

我find的USB_ACCESSORY_ATTACHED解决方法是只是有一个button,再次调用我的OpenAccessory(accessory)方法,似乎是为我工作。 也许这也适用于USB_DEVICE_ATTACHED 。 只要有一个设备连接/没有连接状态的地方,如果没有连接用户可以只是按下该button。

编辑:我发现,在清单中放置android:launchMode="singleTask"似乎“注册”了USB_ACCESSORY_ATTACHED的意图,尽pipe它从来没有出现,因此它的工作就好像它正在做什么。

您可以在清单中声明意图filter,如下所述: http : //developer.android.com/guide/topics/connectivity/usb/host.html

那么你可以在onResume()或onNewIntent()中捕获android.hardware.usb.action.USB_DEVICE_ATTACHED。

当你的活动正在运行,你附加你的USB设备,主意图抛出onResume(),但android.hardware.usb.action.USB_DEVICE_ATTACHED onNewIntent()。 根据这个来调整你的代码。

你可以声明onNewIntent()如下:

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); System.out.println("onNewIntent" + intent.getAction()); if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())) { mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if(mDevice!= null) mUsbManager.requestPermission(mDevice, mPermissionIntent); } } 

和onResume()类似。

在Android 4.0.4设备上testing:三星Galaxy Tab 750