AOA的规范目的是能够将安卓设备作为device连接到host中,而且数据由安卓应用处理。在安卓手机连接到usb的host控制器后,默认是不启用AOA功能的,需要在主机中对USB设备发送3个命令(Google的私有指令):
- 获取版本号:ACCESSORY_GET_PROTOCOL 51
- 设置字符串:ACCESSORY_SEND_STRING 52(manufacturer/model/description/version/uri/serial)
- 启用Accessory模式:ACCESSORY_START 53
在完成AOA功能之后,Device的VID应该变成了0x18D1,PID为0x2D00或0x2D01。交互流程如下:
2019-02-18_14-56-55-AOA-process.png
在windows中可以开发应用程序完成UsbHost的逻辑以激活手机的AOA应用。为了能直接访问USB,需要借助libusb库,同时需要在windows中使用libusb支持的驱动替换默认的安卓驱动。
如何在android中使用AOA
有两种使用AOA的方式,第一种是用户插入USB设备的时候,另外一种是应用启动是通过UsbManager查找。第一种方式中应用自动拥有访问此设备的权限,同时在intent中包含Accessory的信息。第二种方式则需要判断是否有USB设备,同时需要主动请求用户赋予权限。
注意事项
不管是哪种方式,在应用没有重新create,intent中包含的信息不会变化,因此应用要小心处理一个activity是用户插入设备而启动的还是通过UsbManager查找的。同时要注意的是在一个activity中USB设备不能被关闭,一旦关闭则不能再使用。
原文:https://nxmax.github.io/java/android-aoa/