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。

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

  • Android开发USB转移
  • 通过USB连接两个Android设备
  • 以编程方式连接和断开Android设备
  • USB_DEVICE_ATTACHED意图不发射
  • 以编程方式连接和断开Android设备
  • usb设备android,c#Xamarin
  • 在将控制转移到端点0之前,是否需要声明一个接口?
  • Android主机模式USBdebugging
  • 这是一个已知的缺陷:

    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