首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >USB_DEVICE_ATTACHED意图未触发

USB_DEVICE_ATTACHED意图未触发
EN

Stack Overflow用户
提问于 2011-05-29 03:16:44
回答 11查看 25.6K关注 0票数 26

有没有人能让android.hardware.usb.action.USB_DEVICE_ATTACHED“正常工作?

好的,我正在尝试使用新的usb主机模式功能来检测何时连接了usb设备。出于我的目的,我希望在连接设备的任何时候都能收到通知。我没能看到它的发生。我正在使用一个我知道可以工作的广播接收器(当我让它监听其他事情时,比如按下主页按钮。无论我怎么尝试,我似乎都不能得到射击的意图……因此,为了简单起见,我决定忘记我的项目,尝试使用google自己的示例代码,看看我是否至少可以做到这一点。我没有导弹发射器,但我想我至少可以让它的USB_Device_Attached发射。不行。我对代码进行了修改,使其适用于其他设备。首先,我尝试调整设备筛选器xml。我添加了我的设备(键盘):

代码语言:javascript
复制
<usb-device vendor-id="1050" product-id="0010" />

我从lsusb命令中获得了供应商和产品。连接设备后,logcat会显示已找到该设备

代码语言:javascript
复制
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.MAIN

xoom确实找到了键盘,并且可以从设备使用它(我可以在浏览器中使用它来键入字母)。intent会触发(但它只会触发android.intent.action.MAIN),我从来没有得到过DEVICE_ATTACHED的意图。日志条目来自示例代码:

代码语言:javascript
复制
Log.d(TAG, "intent: " + intent.getAction().toString());

在恢复功能中。在进一步挖掘和删除对usb的引用后,我发现我制作的每个应用程序都会在连接/拆卸键盘时调用简历(因此有了intent: android.intent.action.MAIN日志条目)。现在我唯一能想到的就是这是android源码中的一个bug。顺便说一句,我使用的是带有os 3.1的wifi xoom。

EN

回答 11

Stack Overflow用户

发布于 2011-11-30 23:52:26

我也有同样的问题。我最终认为在设备筛选器xml中应该添加以下行。

代码语言:javascript
复制
<usb-device vendor-id-"xxxxx" product-id="yyyyy">

xxxxx和yyyyy应为十进制数字。不是十六进制代码。那么一切都像广告中说的那样!我知道已经很晚了,但我希望它能帮上忙。

票数 21
EN

Stack Overflow用户

发布于 2011-05-30 16:57:55

所以我找到了我的问题的解决方案,我学到了很多,希望它能帮助其他人。

因此,首先,HID设备不会触发任何意图。它们也不会出现在mUsbManager.getDeviceList()列表中。然而,其他的事情是这样的。我给了一个usb记忆棒,你知道什么,该设备在设备列表中列出。我还发现返回的设备没有a类、子类或协议。调试显示,父接口确实具有正确的类/子类/和协议。另外,如果您必须具有设备筛选器。我最终使用了一个class=0008 (USB STORAGE)来实现我的目的。我猜其他类也可以。

因此,现在开始弄清楚意图。事实证明,意图必须附加到启动器活动。我将其附加到服务或接收器的尝试将不会有任何结果。所以现在我已经准备好了,我现在看到当我连接我的设备(usb记忆棒)时会弹出通知,它会要求我将我的应用程序设置为该设备的默认设置。完美的现在,我的应用程序在我每次连接该设备时都会运行。请注意,系统将提示您输入每个唯一的设备。但只有一次。它的注册方式看起来很像默认的程序。

好吧,我想这就是我所发现的。太糟糕了,当键盘/鼠标连接时,你得不到通知。哦,还有一件事。tiamat内核没有任何问题,现在运行它没有任何问题。

票数 14
EN

Stack Overflow用户

发布于 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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档