有没有人能够得到android.hardware.usb.action.USB_DEVICE_ATTACHED"工作?
好吧,我正在尝试使用新的USB主机模式功能来检测何时连接USB设备.出于我的目的,我希望在设备连接时得到通知.我无法看到它发生.我正在使用我知道有效的广播接收器(当我听到其他东西时,例如按下主页按钮.无论我尝试什么,我似乎无法获得触发的意图......所以让事情变得简单我决定忘记我的项目,并尝试使用谷歌自己的示例代码,看看我是否至少可以做到这一点.我没有一个导弹发射器,但我想我至少可以得到它USB_Device_Attached没有去.我调整了代码以适用于其他设备.首先我尝试调整设备过滤器xml.我添加了我的设备(键盘):
<usb-device vendor-id="1050" product-id="0010" />
Run Code Online (Sandbox Code Playgroud)
我从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.MAIN
Run Code Online (Sandbox Code Playgroud)
xoom确实找到了键盘,它可以在设备上使用(我可以在浏览器中使用它来输入字母).意图类型的火(但它只触发android.intent.action.MAIN)我没有得到DEVICE_ATTACHED意图.日志条目来自示例代码:
Log.d(TAG, "intent: " + intent.getAction().toString());
Run Code Online (Sandbox Code Playgroud)
在恢复功能中.在更多地挖掘并删除对usb的任何引用后,我发现每个应用程序都会在连接/分离键盘时调用简历(因此意图:android.intent.action.MAIN日志条目).现在我唯一可以想到的是它是android源码中的一个bug.顺便说一下,我正在使用带有操作系统3.1的wifi xoom.
Sri*_* K. 21
我也有同样的问题.我终于想通了在设备过滤器xml中我们应该添加以下行.
<usb-device vendor-id-"xxxxx" product-id="yyyyy">
Run Code Online (Sandbox Code Playgroud)
xxxxx和yyyyy应为十进制数.不是HEX代码.然后这一切都像宣传的那样工作!我知道它已经晚了但我希望它有所帮助.
D-T*_*D-T 13
所以我找到了解决问题的方法,并且我已经学到很多希望它可以帮助别人.
因此,首先关闭HID设备不会启动任何意图.它们也不会出现在mUsbManager.getDeviceList()列表中.然而其他事情.我给了一个usb记忆棒,你知道该设备列在设备列表中.我还发现返回的设备没有类,子类或协议.调试显示父接口确实具有适当的类/子类/协议.此外,如果您必须有设备筛选器.我最终class=0008 (USB STORAGE)为了我的目的而工作.我猜其他课也会奏效.
所以现在要搞清楚意图.事实证明,意图必须附加到启动器活动.我试图将它附加到服务或接收器上的尝试不会有任何成果.所以现在我得到了解雇的意图我现在看到当我连接我的设备(usb记忆棒)时弹出通知它它要求我将我的应用程序设置为该设备的默认设置.现在完美我的应用程序每次连接该设备时都会运行.请注意,系统将提示您输入每个唯一的设备.但只有一次.它看起来很像默认程序.
好吧,我认为这总结了我发现的东西.当键盘/鼠标连接时,你无法收到通知.还有件事儿.tiamat内核没有任何问题,现在运行它并没有问题.
我最近发现了类似问题的解决方案.
正如有人已经指出的那样,HID devices不要启动意图,我认为这是你的问题.
但是,相关问题是,如果您的程序设置为在连接USB设备时运行,那么即使应用程序运行,您也无法捕获该USB_DEVICE_ATTACHED操作.相反,系统会看到该意图,并说"哦,这意味着这个应用程序想要运行(如清单中声明的那样),然后它会向您发送android.intent.action.MAIN操作而不是USB_DEVICE_ATTACHED操作,并且它会调用onResume().甚至如果您的应用程序正在运行.据我所知,USB_DEVICE_ATTACHED如果您的清单声明您的应用程序将在连接USB设备时运行,则无法捕获意图.您只需要输入一些代码onResume()来检查是否USB即使您的程序正在运行,当连接USB设备时,onResume也会再次被调用.
我在这里更详细地注意到我的解决方案:Android 3.1 USB-Host - BroadcastReceiver没有收到USB_DEVICE_ATTACHED
小智 1
好吧,更多的工作,更多的失败,但还是有一些进步。
我从sdk文档中找到了更多信息。看来您必须拥有设备过滤器才能使用意图。所以我决定尝试使用类过滤器而不是供应商/产品 ID。我认为它会更通用,并希望能够捕获 hid 设备。我使用 03h 作为类 id ,我尝试了各种格式,我尝试了子类,我什至使用 lsusb 来发现我的设备的类、子类和协议。这些似乎根本没有帮助。因此,我进一步查看了 sdk 文档,并决定尝试枚举所有设备,以查看操作系统看到的类/子类/协议整数。我复制了代码并将其粘贴到单击侦听器中并添加了 log.v 语句。logcat 中没有显示任何内容。
看起来,美国系统没有看到任何设备(即使该设备实际上可以工作。)现在这非常表明 USB 设备连接意图未触发。现在我必须说我在我的 xoom (tiamat) 中使用自定义内核。我认为这可能与前一段时间的问题有关,所以我恢复到了stock 3.1。现在仍在进步。现在这是不久前的事了,在我尝试枚举之前,所以现在我将再次恢复并继续处理库存,直到我确定内核不是问题为止。当我了解更多信息后,我会回来查看。成功或失败。当然,如果其他人比我更理解这一点,请插话。最后一点,当我在文档中看到这一点时,我非常担心整个 otg 主机模式。请注意,coe 是相同的,即使它引用了两种方法枚举。可能只是文案作者的错误,但鉴于所有这些失败,仍然有些人担心。
| 归档时间: |
|
| 查看次数: |
23092 次 |
| 最近记录: |