需求:
电脑控制手机,carlife等一些软件的基础需求
分析:
目前的软件都需要adb调试,所以这个是突破口
参考
百度carlife
注意事项
1.需要设备端打开usb调试
2.设备端的连接方式不能是mtp,必须是“仅充电”
3.通过usb传输的最大数据是MAX_USBFS_BUFFER_SIZE = 16384(视频的关键帧会超过这个大小)
过程
* aoa通信流程
* host首先检测到usb设备,然后查询是否支持AOA模式,以及支持的版本 (host端不一定是android设备)
* 如果支持的话,设置“MANUFACTURER_NAME”,“MODEL_NAME”,“VERSION”等信息
* 最后启动aoa模式
*
*
* devices端的apk,根据manifest里面的配置,<usb-accessory manufacturer="asysbang" model="model" version="version" />
* 当3个参数都匹配之后会自动启动对应的activity
* 起来的activity可以获得对应的UsbAccessory
(假设只有一个android设备的情况下)
1.监听UsbManager.ACTION_USB_DEVICE_ATTACHED
2.申请device的权限 mUsbManager.requestPermission(mDevice,mPendingIntent);
3.在申请的回调广播里,和device交互
UsbDeviceConnection udc = mUsbManager.openDevice(device);
byte [] datas = new byte[2];
int ret = udc.controlTransfer(UsbConstants.USB_DIR_IN | UsbConstants.USB_TYPE_VENDOR, 51, 0,0, datas, datas.length, 0)
requestType 一定要加上UsbConstants.USB_TYPE_VENDOR,否则得到的结果是不支持aoa模式
待解决问题
1.aoa模式下数据传输的具体代码
2.外设端手机截图方法(目前看应该用的是)
final MediaProjectionManager projectionManager = (MediaProjectionManager)
getSystemService(Context.MEDIA_PROJECTION_SERVICE);
Intent intent = projectionManager.createScreenCaptureIntent();
startActivityForResult(intent, REQUEST_CODE);