AOA的规范目的是能够将安卓设备作为device连接到host中,而且数据由安卓应用处理。在安卓手机连接到usb的host控制器后,默认是不启用AOA功能的,需要在主机中对USB设备发送3个命令(Google的私有指令):
在完成AOA功能之后,Device的VID应该变成了0x18D1,PID为0x2D00或0x2D01,这个时候安卓系统就会根据主机发送的字符串信息,查找手机上匹配这些字符串(字符串的作用是做特征匹配)的应用,每个应用里面定义能够匹配哪些特征。
交互流程如下:
在windows中可以开发应用程序完成UsbHost的逻辑以激活手机的AOA应用。windows的普通应用程序为了能直接访问USB,需要借助libusb库,同时需要在windows中使用libusb支持的驱动替换默认的安卓驱动。
有两种使用AOA的方式,第一种是用户插入USB设备的时候,另外一种是应用启动是通过UsbManager查找。第一种方式中应用自动拥有访问此设备的权限,同时在intent中包含Accessory的信息。第二种方式则需要判断是否有USB设备,同时需要主动请求用户赋予权限。
不管是哪种方式,如果应用没有重新create,intent中包含的信息不会变化,因此应用要小心处理一个activity是用户插入设备而启动的还是通过UsbManager查找的。同时要注意的是在一个activity中USB设备不能被关闭,一旦关闭则不能再使用。