asysbang

标题: 基于adb调试的投屏(Android平台) [打印本页]

作者: admin    时间: 2019-9-3 14:25
标题: 基于adb调试的投屏(Android平台)
#需求:
电脑控制手机,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);






欢迎光临 asysbang (http://asysbang.com/) Powered by Discuz! X2.5