2013年9月11日

Android─偵測網路連線狀態by ConnectivityManager

Android 手機,目前是否連上網路,是用哪種方式連上網路,wifi or 行動網路,現在網路是不是在漫遊中,我們都可以透過ConnectivityManager這個class取得相關的資訊

要判斷wifi或者行動網路是否有連線
首先要先加入權限

再使用下面程式碼

ConnectivityManager manager = (ConnectivityManager) 
getSystemService(CONNECTIVITY_SERVICE);
//For Data network check
boolean is3g = 
manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
//For WiFi Check
boolean isWifi = 
manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

is3g true 代表行動網路有連線  false代表沒有

isWifi true 代表wifi有連線 false代表沒有

若想要知道網路的相關狀態
我們可以使用

ConnectivityManager CM = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = CM.getActiveNetworkInfo();

而當中要注意到的地方, 是在 NetworkInfo 這段, 倘若你的手機目前不在網路的服務範圍, 也就是說沒有任何方式可以連出去網路 則 CM.getActiveNetworkInfo() 取回的 Reference 會是 Null, 忘了做此判斷的話, 手機則會立刻罷工給你看 (NullPointerException) 而比較常見需要取得的資料如下:

info.getTypeName();     // 目前以何種方式連線 [WIFI]
info.getState();        // 目前連線狀態 [CONNECTED]
info.isAvailable();     // 目前網路是否可使用 [true]
info.isConnected();     // 網路是否已連接 [true]
info.isConnectedOrConnecting(); // 網路是否已連接 或 連線中 [true]
info.isFailover();      // 網路目前是否有問題 [false]
info.isRoaming();       // 網路目前是否在漫遊中 [false]

如果要偵測網路狀態改變
我們可以用一個BroadcastReceiver去監聽action
android.net.conn.CONNECTIVITY_CHANGE

android.net.wifi.WIFI_STATE_CHANGED
如此就可以得知手機的連線狀態改變

參考網址:
http://wp.me/pCXXH-2Q
http://goo.gl/Ve9SnY
http://viralpatel.net/blogs/android-internet-connection-status-network-change/
http://developer.android.com/reference/android/net/NetworkInfo.html

沒有留言:

張貼留言