android監聽網絡狀態

ConnectivityManager有四個主要任務:

1、監聽手機網絡狀態(包括GPRS,WIFI, UMTS等)

2、手機狀態發生改變時,發送廣播

3、當一個網絡連接失敗時進行故障切換

4、爲應用程序提供可以獲取可用網絡的高精度和粗糙的狀態

 

 

Ps:網上還有很多關於使用TelephonyManager 的方法的,方法如下(但是我試了好幾次都有問題,如每次第一次進入一個Activity時會自動收到網絡斷開的信號,每次網絡狀態改變時收到多次回調且狀態不正確。不知道有什麼要注意的地方,求指點!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

mTelephonyMgr.listen(new PhoneStateListener(){

 

@Override

public void onDataConnectionStateChanged(int state) {

switch(state){

case TelephonyManager.DATA_DISCONNECTED://網絡斷開

break;

case TelephonyManager.DATA_CONNECTING://網絡正在連接

break;

case TelephonyManager.DATA_CONNECTED://網絡連接上

break;

}

}

 

}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

 

參考文件:http://mingkg21.iteye.com/blog/723898

 

Android手機大部分支持WIFI、GSM、3G網絡,但每次連接網絡肯定只能使用其中一種。有些程序(比如:運營商定製的)還必須要求使用特定的網絡(如:CMWAP、CTWAP等等),如果當前手機連接的網絡不是這些指定的網絡,這時的程序處理可能是跳轉到網絡設置界面讓用戶手動設置,也有可能是程序自動卻換網絡(從CMNET切換到CMWAP)。

 

切換網絡的過程是先關閉當前的網絡,然後再啓動新的網絡,這個過程需要一定的時間。可能程序這時需要知道新的網絡連接成功後自動登陸,那怎麼知道幾時連接成功呢?這個時間需要多久呢?

 

也許用一個線程去監聽網絡狀態可行,我沒試過。

 

我們可以用另外一種方法,PhoneStateListener

 

沒錯,你沒看錯,就是用PhoneStateListener。很多應用PhoneStateListener都是監聽來電去電,PhoneStateListener還可以監聽網絡斷開、正在連接和連接成功。

 

 

只要重載onDataConnectionStateChanged方法,根據state判斷做相應的處理。

 

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

mTelephonyMgr.listen(new PhoneStateListener(){

@Override

public void onDataConnectionStateChanged(int state) {

switch(state){

case TelephonyManager.DATA_DISCONNECTED://網絡斷開

break;

case TelephonyManager.DATA_CONNECTING://網絡正在連接

break;

case TelephonyManager.DATA_CONNECTED://網絡連接上

break;

}

}

}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

發佈了4 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章