Android 無線鏈接及鏈接狀態研究

經研究Android無線鏈接核心代碼WifiManager.java,仍是有所發現的。java

 

核心代碼以下:網絡

 

  1. connect(WifiConfiguration config, ActionListener listener)
  2. connect(int networkId, ActionListener listener)
  3. save(WifiConfiguration config, ActionListener listener)

如上connect函數,它是一個系統級別的API,並且是被隱藏的,因此在非系統APP中該方法是不能夠被調用到的。對非系統APP而言,若是要鏈接指定的無線網絡,只能採用以下順序已達到該方法的目的:addNetwork、enableNetwork、saveConfiguration和reconnect等。函數

 

並且系統API對於每一個操做都有結果回調操做,監聽接口爲ActionListener,其主要代碼以下:接口

 

ActionListener,包含兩個回調函數onSuccess和onFailure。本次研究咱們主要關心OnFailure的狀況。在如下狀況發生時都會觸發onFailure的回調。get

 

相關的reason有以下幾種:回調函數

很遺憾,以上的監聽接口一樣爲系統API級別的,並且全部的錯誤代碼也是被隱藏的,咱們沒法調用。因此咱們從源碼角度來看看,是否有鏈接回調接口。源碼

 

好比咱們要新加一個網絡步驟以下:io

  1. addNetwork(WifiConfiguration config),沒有回調入口
  2. boolean enableNetwork(int netId, boolean attemptConnect),沒有回調入口
  3. boolean saveConfiguration(),沒有回調入口
  4. boolean reconnect(),沒有回調入口

如上步驟,每個步驟都沒有添加回調的入口,咱們只能經過每一步的結果來知道每一步的成功與否,如若失敗咱們並不可以知道其真實緣由。table

 

 

無線鏈接的狀態以及結果反饋以下:監控

 

 

 

 

 

 

有兩種狀態監控級別,大衆化的、細粒度的,分別以下:

  1. 大衆化的 
  2. 細粒度的 

如上所示,這種細粒度的貌似咱們能夠獲得更多的信息,其中有認證中、分配IP地址、失敗這些多是咱們比較感興趣的。

 

接下來更精彩:

這個函數貌似咱們能夠獲得鏈接失敗的緣由,不過這個有待嘗試。

 

 

總結:

經本次研究得出,若是是非系統級別的應用程序,是不能定製傳入回調接口的。非系統級別的應用程序只能收到鏈接過程及鏈接結果反饋,固然也能夠經過NetworkInfo該類中的getReason方法,獲取某種特殊狀態的緣由,可是這個有待嘗試。或許我瞭解的還不夠深刻,若有異議請及時反饋,謝謝。

相關文章
相關標籤/搜索