美文网首页
基于USB调试的投屏

基于USB调试的投屏

作者: King_Karl | 来源:发表于2018-12-21 10:04 被阅读0次

需求:

电脑控制手机,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);

相关文章

网友评论

      本文标题:基于USB调试的投屏

      本文链接:https://www.haomeiwen.com/subject/nhzpkqtx.html