调用DisplayManagerService创建各种DisplayDevice之前需要注册,注册的任务由DisplayAdapter完成,DisplayAdapter4个子类,DisplayDevice也有4个子类与其一一对应:
- registerDefaultDisplayAdapters,针对内置主屏幕/默认屏幕,displayId=0;或者HDMI接口屏幕,displayId=1。创建LocalDisplayAdapter对象,从SurfaceControl和配置文件中获取参数,创建LocalDisplayDevice,最终生成LogicalDisplay对象。
- registerOverlayDisplayAdapterLocked, 针对overlay的屏幕,创建OverlayDisplayAdapter对象,获取设置信息,没有多余的动作,等用户显示的时候由UI进程调用OverlayDisplayWindow接口创建OverlayDisplayDevice。
- registerWifiDisplayAdapterLocked,可以投屏使用,即Miracast;创建WifiDisplayAdapter和WifiDisplayController对象,使用WifiP2pManager来实现远端设备扫描、发现和连接的任务。
- VirtualDisplay, 后面分析
(图片未完待续)
关于投屏,WifiDisplay可以实现一对一投屏,即Miracast。另外还有网友利用Presentation/VirtualDisplay实现双屏异显,后面有时间扒一扒。