有没有人能让android.hardware.usb.action.USB_DEVICE_ATTACHED“正常工作?
好的,我正在尝试使用新的usb主机模式功能来检测何时连接了usb设备。出于我的目的,我希望在连接设备的任何时候都能收到通知。我没能看到它的发生。我正在使用一个我知道可以工作的广播接收器(当我让它监听其他事情时,比如按下主页按钮。无论我怎么尝试,我似乎都不能得到射击的意图……因此,为了简单起见,我决定忘记我的项目,尝试使用google自己的示例代码,看看我是否至少可以做到这一点。我没有导弹发射器,但我想我至少可以让它的USB_Device_Attached发射。不行。我对代码进行了修改,使其适用于其他设备。首先,我尝试调整设备筛选器xml。我添加了我的设备(键盘):
<usb-device vendor-id="1050" product-id="0010" />我从lsusb命令中获得了供应商和产品。连接设备后,logcat会显示已找到该设备
D/EventHub( 144): No input device configuration file found for device 'Yubico Yubico Yubikey II'.
I/EventHub( 144): New device: id=43, fd=219, path='/dev/input/event8', name='Yubico Yubico Yubikey II', classes=0x80000003, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false
I/InputReader( 144): Device added: id=43, name='Yubico Yubico Yubikey II', sources=0x00000101
I/ActivityManager( 144): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/1 nav=1/2 orien=L layout=0x10000014 uiMode=0x11 seq=47}
D/MissileLauncherActivity(16191): intent: android.intent.action.MAIN
I/EventHub( 144): Removed device: path=/dev/input/event8 name=Yubico Yubico Yubikey II id=43 fd=219 classes=0x80000003
I/InputReader( 144): Device removed: id=43, name='Yubico Yubico Yubikey II', sources=0x00000101
I/ActivityManager( 144): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=1/1/2 nav=1/2 orien=L layout=0x10000014 uiMode=0x11 seq=48}
D/dalvikvm( 144): GC_EXPLICIT freed 78K, 26% free 14717K/19719K, paused 3ms+3ms
D/MissileLauncherActivity(16191): intent: android.intent.action.MAINxoom确实找到了键盘,并且可以从设备使用它(我可以在浏览器中使用它来键入字母)。intent会触发(但它只会触发android.intent.action.MAIN),我从来没有得到过DEVICE_ATTACHED的意图。日志条目来自示例代码:
Log.d(TAG, "intent: " + intent.getAction().toString());在恢复功能中。在进一步挖掘和删除对usb的引用后,我发现我制作的每个应用程序都会在连接/拆卸键盘时调用简历(因此有了intent: android.intent.action.MAIN日志条目)。现在我唯一能想到的就是这是android源码中的一个bug。顺便说一句,我使用的是带有os 3.1的wifi xoom。
发布于 2011-11-30 23:52:26
我也有同样的问题。我最终认为在设备筛选器xml中应该添加以下行。
<usb-device vendor-id-"xxxxx" product-id="yyyyy">xxxxx和yyyyy应为十进制数字。不是十六进制代码。那么一切都像广告中说的那样!我知道已经很晚了,但我希望它能帮上忙。
发布于 2011-05-30 16:57:55
所以我找到了我的问题的解决方案,我学到了很多,希望它能帮助其他人。
因此,首先,HID设备不会触发任何意图。它们也不会出现在mUsbManager.getDeviceList()列表中。然而,其他的事情是这样的。我给了一个usb记忆棒,你知道什么,该设备在设备列表中列出。我还发现返回的设备没有a类、子类或协议。调试显示,父接口确实具有正确的类/子类/和协议。另外,如果您必须具有设备筛选器。我最终使用了一个class=0008 (USB STORAGE)来实现我的目的。我猜其他类也可以。
因此,现在开始弄清楚意图。事实证明,意图必须附加到启动器活动。我将其附加到服务或接收器的尝试将不会有任何结果。所以现在我已经准备好了,我现在看到当我连接我的设备(usb记忆棒)时会弹出通知,它会要求我将我的应用程序设置为该设备的默认设置。完美的现在,我的应用程序在我每次连接该设备时都会运行。请注意,系统将提示您输入每个唯一的设备。但只有一次。它的注册方式看起来很像默认的程序。
好吧,我想这就是我所发现的。太糟糕了,当键盘/鼠标连接时,你得不到通知。哦,还有一件事。tiamat内核没有任何问题,现在运行它没有任何问题。
发布于 2012-03-22 08:34:00
我最近发现了一个类似问题的解决方案。
正如已经有人指出的那样,HID devices没有启动意图,我认为这是您的问题所在。
然而,一个相关的问题是,如果您的程序设置为在连接USB设备时运行,那么即使您的应用程序正在运行,您也无法捕获USB_DEVICE_ATTACHED操作。相反,系统会看到这种意图,并说“哦,这意味着这个应用程序想要运行(正如您的清单中声明的那样),然后它会向您发送android.intent.action.MAIN操作而不是USB_DEVICE_ATTACHED操作,并调用onResume()。即使你的应用程序正在运行。因此,据我所知,如果您的清单声明您的应用程序将在连接USB_DEVICE_ATTACHED设备时运行,则无法捕获USB意图。你只需要在onResume()中放一些代码来检查是否连接了USB。即使您的程序正在运行,onResume也会在连接USB设备时再次被调用。
我在这里更详细地介绍了我的解决方案:Android 3.1 USB-Host - BroadcastReceiver does not receive USB_DEVICE_ATTACHED
https://stackoverflow.com/questions/6163856
复制相似问题