之前開發(fā)了一個WiFi,熱點相關的應用。因為對這方面也不熟悉,剛開始找資料看書,但看明白實現(xiàn)時,發(fā)現(xiàn)隨著android版本更新,相關api有較大改動,之前的代碼不能用。經過一番探索,最后實現(xiàn)出來了,現(xiàn)在把它記錄下來,希望能給需要的人一些幫助。
首先來講WiFi開發(fā)相關,那第一步肯定是如何來控制WiFi打開關閉狀態(tài),以及如何來監(jiān)聽其狀態(tài)變化。
WiFi連接控制類--WiFiManager

從官網參考可以知道它以下幾個作用:
- 獲取配置好的網絡,也就是之前連接過的WiFi;
- 對當前活動的WiFi網絡建立新連接或斷開,可以查詢有關網絡狀態(tài);
- 周圍掃描到的接入點,對應類為ScanResult;
- 定義了在Wi-Fi狀態(tài)改變后發(fā)出廣播的intent action。
可以看出主要是用它來控制監(jiān)聽WiFi狀態(tài)
打開關閉WiFi
對WiFi進行控制要聲明相關權限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
接著獲取WifiManager
mWifiManager= (WifiManager) getApplicationContext()
.getSystemService(Context.WIFI_SERVICE);
注意這里必須使用Application的上下文,那在fragment中獲取的話通過getActivity().getApplicationContext(),因為碎片中無法直接獲取Application Context
獲取到WifiManager后就可以通過isWifiEnabled()判斷是否打開,setWifiEnabled(boolean enabled)打開或關閉wifi,它的返回值說明操作結果,可能操作失敗
//set wifi switch state
swwifi.setChecked(mWifiManager.isWifiEnabled());
swwifi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mWifiManager.setWifiEnabled(isChecked);
}
});
這里簡單的通過個switch顯示和控制開關狀態(tài)

WiFi狀態(tài)監(jiān)聽
上面只是能在應用中控制wifi開關,但如果在外面wifi發(fā)生變化,應用內沒監(jiān)聽的話,那相關顯示就錯誤了
監(jiān)聽是通過WifiManager定義的一些action動態(tài)注冊廣播監(jiān)聽(只能動態(tài)注冊)
//注冊接收器
private void registerBroadcast() {
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction()== WifiManager.WIFI_STATE_CHANGED_ACTION) {
switch (intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN)) {
case WIFI_STATE_DISABLED:{
Toast.makeText(context, "WiFi disabled", Toast.LENGTH_SHORT).show();
swwifi.setChecked(false);
break;
}
case WIFI_STATE_DISABLING:{
Toast.makeText(context, "WiFi disabling", Toast.LENGTH_SHORT).show();
break;
}
case WIFI_STATE_ENABLED :{
Toast.makeText(context, "WiFi enabled", Toast.LENGTH_SHORT).show();
swwifi.setChecked(true);
break;
}
case WIFI_STATE_ENABLING:{
Toast.makeText(context, "WiFi enabling", Toast.LENGTH_SHORT).show();
break;
}
case WIFI_STATE_UNKNOWN:{
Toast.makeText(context, "WiFi state unknown", Toast.LENGTH_SHORT).show();
break;
}
}
}
}
}, filter);
}
其他一些狀態(tài)也基本是通過動態(tài)注冊廣播監(jiān)聽

上面有一點,剛打開注冊廣播時立即收到一條當前狀態(tài)的廣播