android 解决getNetworkInfo过时
今天,簡單講講android里如何解決getNetworkInfo過時(shí)的問題。
之前,我寫了一篇博客,講如何獲取手機(jī)是否連網(wǎng),其中有的代碼用到了ConnectivityManager 的getNetworkInfo函數(shù),但是最近檢查代碼時(shí),發(fā)現(xiàn)getNetworkInfo已經(jīng)過時(shí),所以在網(wǎng)上查找了資料,發(fā)現(xiàn)關(guān)于這個(gè)的不多。但是還是有替代的函數(shù)判斷手機(jī)是否聯(lián)網(wǎng)。這里記錄一下。
描述了當(dāng)前網(wǎng)絡(luò) Mobile和Wifi的狀態(tài)。
有2個(gè)內(nèi)部類 NetworkInfo.DetailedState(精確的網(wǎng)絡(luò)狀態(tài))和 NetworInfo.State(粗略的網(wǎng)路狀態(tài))
| Detailed state | Coarse-grained state |
| IDLE | DISCONNECTED |
| SCANNING | CONNECTING |
| CONNECTING | CONNECTING |
| AUTHENTICATING | CONNECTING |
| CONNECTED | |
| DISCONNECTING | DISCONNECTING |
| DISCONNECTED | DISCONNECTED |
| UNAVAILABLE | DISCONNECTED |
| FAILED | DISCONNECTED |
?
里面幾個(gè)常用函數(shù)
isAvailable()? isConnected()? getDetailedState()?? getState()? getExtrInfo()
getType()? 獲取當(dāng)前網(wǎng)絡(luò)的類型mobile or Wi-Fi
getTypeName() 獲取當(dāng)前網(wǎng)絡(luò)的類型名 “WIFI” or “MOBILE”
ConnectivityManager
用于查詢網(wǎng)絡(luò)連接狀態(tài),當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生改變時(shí)通知應(yīng)用。通過調(diào)用Context.getSystemService(Context.CONNECTIVITY_SERVICE)。主要功能:
1.?????? 監(jiān)視網(wǎng)絡(luò)(Wi-Fi,GPRS,UMTS,etc)的連接
2.?????? 網(wǎng)絡(luò)狀態(tài)發(fā)生改變時(shí)發(fā)送廣播
3.?????? 網(wǎng)絡(luò)丟失時(shí)嘗試轉(zhuǎn)移的別的網(wǎng)絡(luò)
4.?????? 提供API
?主要函數(shù)介紹
1.?????? NetworkInfo?? getActiveNetworkInfo()? 獲取可用網(wǎng)絡(luò)(可用)
2.?????? NetworkInfo[]? getAllNetworkInfo?? 獲取所有可用網(wǎng)絡(luò)(已經(jīng)過時(shí))
3.?????? NetworkInfo?? getNetworkInfo(int networkType) 獲取固定網(wǎng)絡(luò)信息? (已經(jīng)過時(shí))
4.?????? isNetworkTypeValid(int networkType)
Android判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)是否連接函數(shù)
Public static Boolean isNetworkConnected(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getApplicationContext().getSystemService( Context.CONNECTIVITY_SERVICE); if (manager == null) { return false; } NetworkInfo networkinfo = manager.getActiveNetworkInfo(); if (networkinfo == null || !networkinfo.isAvailable()) { return false; } return true; }
或者這樣也可以
/** * 網(wǎng)絡(luò)是否可用 * * @param activity * @return */ public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { } else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; }
更加嚴(yán)謹(jǐn)?shù)膶懛?#xff1a;
public static boolean checkNet(Context context) { try { ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo info = connectivity.getActiveNetworkInfo(); if (info != null && info.isConnected()) { if (info.getState() == NetworkInfo.State.CONNECTED) { return true; } } } } catch (Exception e) { return false; } return false; }
簡單講講,其實(shí)就是使用了ctiveNetworkInfo()替代了已經(jīng)過時(shí)的getNetworkInfo(int networkType) ,這樣就可以判斷手機(jī)網(wǎng)絡(luò)是否連接。如果判斷網(wǎng)絡(luò)類型,那怎么辦呢?
/** * 判斷當(dāng)前網(wǎng)絡(luò)是否是wifi網(wǎng)絡(luò) * if(activeNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) { //判斷3G網(wǎng) * * @param context * @return boolean */ public static boolean isWifi(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { return true; } return false; }
android 解決getNetworkInfo過時(shí)就講完了。
就這么簡單。
總結(jié)
以上是生活随笔為你收集整理的android 解决getNetworkInfo过时的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 如何监听应用前后台切换
- 下一篇: android 插补器Interpola