一、概述
底層使用Wifi Direct技術。
二、Source與Sink邏輯
1.Source端
打開WifiDisplay方法;即所有動作都是通過WifiDisplayController完成:
Settings.Global.putInt(getContentResolver(),Settings.Global.WIFI_DISPLAY_ON, mWifiDisplayOnSetting?1:0);
會觸發WifiDisplayController.java中updateWfdEnableState調用如下:
wfdInfo.setDeviceType(WifiP2pWfdInfo.WFD_SOURCE)->WifiP2pManager.setMiracastMode(WifiP2pManager.MIRACAST_SOURCE)
updateScanState->WifiP2pManager.discoveryPeers //包括信道協商
WifiP2pManager.requestPeers
獲取到掃描結果以後;如果之前連接過,則直接連接。
p2p連接成功以後;WiFiDisplayController會調用ExtendRemoteDisplayHelper去binder廠家的WfdService,進而到SessionManagerService直到WfdSession。
還有一種情況是,第一次用戶手動點擊連接:這個是應用直接調用DisplayManager的connectWifiDisplay接口,該接口最終也是通過上處WifiDisplayController到ExtendRemoteDisplayHelper進而調用到WfdService核心服務。WfdService會通過Listen機制將結果給到ExtendRemoteDisplayHelper。
2.Sink端
sink端打開方法;直接調用如下接口:
WifiP2pManger.setMiracastMode(WifiP2pManager.MIRACAST_SINK) //設置設備未sink端設備
WifiP2pManager.discoveryPeers //包括信道協商
WifiP2pManager.requestPeers
WifiP2pManager.connect等動作 //包括Go協商以及wps認證
p2p連接成功以後;會直接去binder廠家的WfdService,進而到SessionManagerService直到WfdSession。
WfdService會通過Listen機制將結果給到應用。