Android判斷WiFi是否可用的可靠方法
在一些程序中,需要從網(wǎng)上下載數(shù)據(jù),或者通過(guò)其他方式對(duì)網(wǎng)絡(luò)產(chǎn)生流量,當(dāng)wifi不可用時(shí)應(yīng)該提示用戶wifi已經(jīng)不可用了,是否繼續(xù),因?yàn)槿绻鹷ifi 掉了,那么程序可能采用3G卡或其他的收費(fèi)的渠道使用網(wǎng)絡(luò),會(huì)導(dǎo)在不知情時(shí)產(chǎn)生大量的上網(wǎng)費(fèi)用。通過(guò)查看android的api可使用下列方法進(jìn)行判斷:
Java代碼
- public static boolean isWiFiActive(Context inContext) {
- Context context = inContext.getApplicationContext();
- WifiManager wifiManager = (WifiManager) context
- .getSystemService(Context.WIFI_SERVICE);
- return wifiManager.isWifiEnabled();
- }
在模擬器上使用這個(gè)方法時(shí),可以正確判斷wifi是否可用,但是在真機(jī)上就判斷不出來(lái)。wifi是斷開的,但是返回的結(jié)果true,造成wifi判斷不準(zhǔn)確。經(jīng)過(guò)嘗試可使用如下的方法判斷方能正確:
Java代碼
- public static boolean isWiFiActive(Context inContext) {
- Context context = inContext.getApplicationContext();
- ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE);
- if (connectivity != null) {
- NetworkInfo[] info = connectivity.getAllNetworkInfo();
- if (info != null) {
- for (int i = 0; i < info.length; i++) {
- if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {
- return true;
- }
- }
- }
- }
- return false;
- }