android 解决getNetworkInfo过时
今天,簡單講講android里如何解決getNetworkInfo過時的問題。
之前,我寫了一篇博客,講如何獲取手機是否連網,其中有的代碼用到了ConnectivityManager 的getNetworkInfo函數,但是最近檢查代碼時,發現getNetworkInfo已經過時,所以在網上查找了資料,發現關于這個的不多。但是還是有替代的函數判斷手機是否聯網。這里記錄一下。
描述了當前網絡 Mobile和Wifi的狀態。
有2個內部類 NetworkInfo.DetailedState(精確的網絡狀態)和 NetworInfo.State(粗略的網路狀態)
| Detailed state | Coarse-grained state |
| IDLE | DISCONNECTED |
| SCANNING | CONNECTING |
| CONNECTING | CONNECTING |
| AUTHENTICATING | CONNECTING |
| CONNECTED | |
| DISCONNECTING | DISCONNECTING |
| DISCONNECTED | DISCONNECTED |
| UNAVAILABLE | DISCONNECTED |
| FAILED | DISCONNECTED |
?
里面幾個常用函數
isAvailable()? isConnected()? getDetailedState()?? getState()? getExtrInfo()
getType()? 獲取當前網絡的類型mobile or Wi-Fi
getTypeName() 獲取當前網絡的類型名 “WIFI” or “MOBILE”
ConnectivityManager
用于查詢網絡連接狀態,當網絡狀態發生改變時通知應用。通過調用Context.getSystemService(Context.CONNECTIVITY_SERVICE)。主要功能:
1.?????? 監視網絡(Wi-Fi,GPRS,UMTS,etc)的連接
2.?????? 網絡狀態發生改變時發送廣播
3.?????? 網絡丟失時嘗試轉移的別的網絡
4.?????? 提供API
?主要函數介紹
1.?????? NetworkInfo?? getActiveNetworkInfo()? 獲取可用網絡(可用)
2.?????? NetworkInfo[]? getAllNetworkInfo?? 獲取所有可用網絡(已經過時)
3.?????? NetworkInfo?? getNetworkInfo(int networkType) 獲取固定網絡信息? (已經過時)
4.?????? isNetworkTypeValid(int networkType)
Android判斷當前網絡狀態是否連接函數
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; }
或者這樣也可以
/** * 網絡是否可用 * * @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; }
更加嚴謹的寫法:
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; }
簡單講講,其實就是使用了ctiveNetworkInfo()替代了已經過時的getNetworkInfo(int networkType) ,這樣就可以判斷手機網絡是否連接。如果判斷網絡類型,那怎么辦呢?
/** * 判斷當前網絡是否是wifi網絡 * if(activeNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) { //判斷3G網 * * @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過時就講完了。
就這么簡單。
總結
以上是生活随笔為你收集整理的android 解决getNetworkInfo过时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 如何监听应用前后台切换
- 下一篇: android 插补器Interpola