Android笔记5-与USB HID 设备通信(一)

时间:2023-03-08 20:44:28
1、了解
支持USB 主机(host)或者从机(accessary )模式最终是取决于设备的硬件,而与平台版本无关。我们可以通过usesfeature这个方法来查询自己的设备是否支持USB主从。
2、主机模式
当设备为USB 主机模式的时候,驱动着总线,枚举已连接的USB设备。平台版本在3.1以上支持该模式。
我们所使用的USB开发包是: android.hardware.usb 
该包有下面几个类:
Android笔记5-与USB HID 设备通信(一)
Android笔记5-与USB HID 设备通信(一)
除了异步通信的时候你必须用到 UsbRequest 这个类之外,其他大部分与USB设备通信的情形,你都需要用到所有的这些类。总的来说,我们是通过 UsbManager 来取得 所希望的USB设备,当我们有了这个设备后,我们需要找到恰当的 UsbInterface 和 UsbDeviceConnection 来和USB设备通信。
3、Manifest 要求
(1)因为不是所有的安卓供电设备都保证支持USB 主机API, 那么请记得,包含 android.hardware.usb.host  
(2)使用最低版本为API 12 以上的SDK 版本。在早期 API level 中并不支持USB HOST 
(3)如果你想你的设备被识别为一个可连接的 USB设备,指定一个 <intent-filter> 和 <meta-data>  来为 android.hardware.usb.action.USB_DEVICE_ATTACHED  意图在你的 main 活动中。
<meta-data>   元素指向一个外部的XML 资源文件,该XML文件就是用来声明确认你想要连接的usb设备信息的。
在XML 文件中元素 usb-device 是指你想要过滤的USB设备。以下5个是 usb-device的属性。
  • vendor-id
  • product-id
  • class
  • subclass
  • protocol (device or interface)
保存资源文件到 res/xml/目录中,资源文件的名字必须和你在 <meta-data>  元素中的指定的名字一样。
XML 资源文件的格式如下面例子所示:
<manifest ...>
    <uses-feature android:name="android.hardware.usb.host" />
    <uses-sdk android: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>
在这个实例中以下格式的资源文件应该保存在 res/xml/device_filter.xml 中,来指定你要想连接的USB 设备的属性。
<?xml version="1.0" encoding="utf-8"?>

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