2022-10-24|閱讀時間 ‧ 約 3 分鐘

Android WIFI 掃描概念流程

    Android Wifi掃瞄的部分區分成被動掃描與主動掃描:

    主動掃瞄:每隔一段時間廣播發送probe request的請求,在各個頻段上詢問AP的訊息,若有收到回應,做紀錄,超時的話則換到下個頻段進行廣播。

    被動掃瞄:不發送請求,因為是以省電為目的,因此是單純接收AP傳送的beacon,通過接收到的beacon以獲取AP列表。

    在Android的範疇又分為一般掃瞄與PNO掃瞄:

    一般掃瞄:即為上方所提的掃瞄(WifiSettings和WifiConnectivityManager)。

    PNO掃瞄:掃瞄週期相比於一般掃瞄長,只在特殊情況進行掃瞄,像是滅屏+不連接網路的情況下掃瞄(在WifiConntivityManager的模塊進行)。

    主要進行的Android類為兩種:

    WifiConnectivity 及 WifiSettings後續下發時皆為觸及WifiScanner,WifiConnectivity牽扯到的比較相似於手機本身的變化觸發的掃瞄,如螢幕亮暗。

    WifiSettings觸發的掃瞄偏向於使用者進行某些動作觸發的掃瞄,如開關WIFI掃瞄功能等等。

    最後,因為工作需要,這次做了一個簡單的追蹤WIFI主動掃描下發的其中一個流程,從上層至底層:APP -> Framework ->底層 hal。

    1. 主要追蹤的過程是從WifiSetting觸發掃描時開始運作
    2. 接續到BaseWifiTracker -> WifiPickerTracker -> WifiManager(此處皆屬於Application層)
    3. 從WifiManager -> WifiService的過程需要經過AIDL進程
    4. 接著Service的部分從startScan()的API依序調用到Framework層的結尾,即是WifiNative。(Framework層)
    5. 後續從WifiNative之後開始皆為hal層的範圍,因此程式語言改為C++/C

    以上是關於本次的紀錄。

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.