? 最近在項目上有個需求,要實現檢測當前的wifi是否為我們想要連接的wifi,如果不是,則通過程序控制斷掉當前的wifi,連接上我們所需要的wifi。在網上查閱了很多的資料,有很多大神也分享了實現的方法,借鑒大神們的經驗將我自己的理解分享出來。
?在沒有看懂手機wifi設置的原理以前,以為手機上打開Wifi開關并且連接到指定的wifi,以為是系統定制的,我們是不能去模仿且改變的,查資料后才知道,手機上的wifi開關且設置網絡都是調用了API去實現的,既然API的開源的,那我們也可以去調用API實現我們想要的結果。
當我們檢測WiFi狀態對應結果如下:
WIFI_STATE_DISABLED ? ? 0 ? ? ? 正在關閉
WIFI_STATE_DISABLED ? ? 1 ? ? ? ?已經關閉
WIFI_STATE_ENABLING ? ? 2 ? ? ? 正在打開
WIFI_STATE_ENABLED ? ? 3 ? ? ? ?已經打開
WIFI_STATE_UNKNOWN ? ? 4 ? ? ? ? 未知
以下的這個WifiManagerUtils是我參考大神們的講解封裝的一個類。以下只是部分代碼,完整的請查看分享鏈接鏈接: 鏈接: https://pan.baidu.com/s/1boPrbfL 密碼: wagu
下面是我使用WifiManageUtils連接一個特定的wifi案列
實現的思路是:
?(1)先獲取當前wifi狀態,如果關閉,則調用openWifiEnabled()打開wifi。
?(2)當wifi狀態為3(WIFI_STATE_ENABLED)時,通過getNetWorkId()返回值判斷當前是否有wifi連接,如果判斷是否為我們要設置的目標WIFI,如果不是則通過disconnectWifi斷掉當前連接的WiFi;如果getNetWorkId()返回值返回值為null,則表示當前沒有WiFi連接,則通過getScanResult()獲取周圍所有的wifi,并且查找是否有我們所要連接的目標Wifi。
?(3)找到目標WiFi后,通過addNetWork(managerUtils.createWifiInfo(ssid,psw,3))設置目標wifi。
想要設置wifi只需要在調用的地方通過setSpecificWifi(WifiManagerUtils? wifiManagerUtils, String? ssid,String ? ?psw)設置即可。