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