日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 解决getNetworkInfo过时

發布時間:2024/4/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 解决getNetworkInfo过时 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.





今天,簡單講講android里如何解決getNetworkInfo過時的問題。


之前,我寫了一篇博客,講如何獲取手機是否連網,其中有的代碼用到了ConnectivityManager 的getNetworkInfo函數,但是最近檢查代碼時,發現getNetworkInfo已經過時,所以在網上查找了資料,發現關于這個的不多。但是還是有替代的函數判斷手機是否聯網。這里記錄一下。


描述了當前網絡 MobileWifi的狀態。

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; }


/** * 判斷當前網絡是否是3G網絡 * * @param context * @return boolean */ public static boolean is3G(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) { return true; } return false; } }


android 解決getNetworkInfo過時就講完了。


就這么簡單。



總結

以上是生活随笔為你收集整理的android 解决getNetworkInfo过时的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。