原文:http://developer.android.com/guide/topics/connectivity/usb/host.html

USB HOST模式开发下可能会遇到这个问题。

第一步是在AndroidManifest.xml文件中修改,主意下面红色字体

<manifest ...>
<uses-featureandroid:name="android.hardware.usb.host"/>
<uses-sdkandroid:minSdkVersion="12"/>
   ...
<application>
<activity ...>
           ...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
</intent-filter>

<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter"/>
</activity>
</application>
</manifest>

一般调用的activity都是Main和Lanunch入口,加入上面的action后,在SDK中以Run As Android Application时,仅执行安装动作,不会自动调用到该Activity了,需要自己点安装图标运行apk了,不知道算不算问题。这个不管它了。

接下来还有一个@xml/device_filter需要自己创建,xml文件夹需要在res目录下,device_filter.xml在xml下。这个名字一致即可,可以自己定义名称。device_filter.xml的内容如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>
<usb-device vendor-id="1234"product-id="5678"class="255"subclass="66"protocol="1"/>
</resources>

这里usb-device应该是不能改的关键字,后面的参数是用来过滤设备的,如果你只想检查某一个设备,就采用上面的格式,如果是想检查多个或不限定硬件,可以指定一个甚至一个参数都没有,然后在代码中去枚举设备,这里先略过。

指定设备的话,关键是我红色标记出来的两个参数,USB设备都有这两个属性,怎么知道这两个值呢?在windows中,可以通过设备管理器的通用串行总线控制器找到这个USB设备(不知道哪个?插拔一下看看吧),然后在属性-->详细信息中选择硬件ID,在值的区域可以看到USB\VID_AAAA&PID_BBBB。这个AAAA就是vendor-id,BBBB就是product-id,但要注意,你这里看到的是十六进制的值,写入XML中时一定要转成十进制才行。

如果是linux系统,在终端命令行输入lsusb,找到我们需要的设备(同理,不知道哪个插拔一下,运行两次lsusb)

b074@gliethttp:~$ lsusb
Bus 001 Device 001: ID AAAA:BBBB ......
其中AAAA就是vendor-id,BBBB就是product-id,同样这里也是十六进制的,注意转换。

 

然后,发布APK,到手机上测试一下吧。

創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()