Android 判斷并監(jiān)測網(wǎng)絡(luò)連接狀態(tài)

2018-08-02 18:26 更新

編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

重復(fù)鬧鐘和后臺服務(wù)最常見的功能之一,是用來從網(wǎng)絡(luò)上獲取應(yīng)用更新,存儲數(shù)據(jù)或者執(zhí)行大文件的下載。但是如果沒有獲得網(wǎng)絡(luò)連接,或者連接的速度太慢以至于下載無法完成,那么就沒有必要喚醒設(shè)備并執(zhí)行那些更新等操作了。

我們可以使用ConnectivityManager來檢查設(shè)備是否連接到網(wǎng)絡(luò),以及網(wǎng)絡(luò)的類型(譯注:通過網(wǎng)絡(luò)的連接狀況改變,相應(yīng)的改變app的行為,減少無謂的操作,從而延長設(shè)備的續(xù)航能力)。

判斷當前是否有網(wǎng)絡(luò)連接

如果沒有網(wǎng)絡(luò)連接,那么就沒有必要做那些需要聯(lián)網(wǎng)的事情。下面的代碼片段展示了如何通過ConnectivityManager檢查當前活動的網(wǎng)絡(luò)類型,并確定它是否可以連接到互聯(lián)網(wǎng):

ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

判斷連接網(wǎng)絡(luò)的類型

我們還可以獲取到當前的網(wǎng)絡(luò)連接類型。

設(shè)備通常可以有移動網(wǎng)絡(luò),WiMax,Wi-Fi與以太網(wǎng)連接等類型。通過查詢當前活動的網(wǎng)絡(luò)類型,可以根據(jù)網(wǎng)絡(luò)的帶寬對更新頻率進行調(diào)整:

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

移動網(wǎng)絡(luò)的使用費會比Wi-Fi更高,所以多數(shù)情況下,如果設(shè)備正在使用移動網(wǎng)絡(luò),我們應(yīng)該減少應(yīng)用的更新頻率;同樣地,還應(yīng)該臨時地掛起一些文件下載任務(wù)直到有Wi-Fi連接時再繼續(xù)下載。

如果已經(jīng)關(guān)閉了更新操作,那么需要監(jiān)聽網(wǎng)絡(luò)連接的變化,這樣就可以在建立了互聯(lián)網(wǎng)訪問之后,重新恢復(fù)它們。

監(jiān)聽網(wǎng)絡(luò)連接的變化

當網(wǎng)絡(luò)連接發(fā)生改變時,ConnectivityManager會廣播CONNECTIVITY_ACTIONandroid.net.conn.CONNECTIVITY_CHANGE)的Action消息。 我們可以在Manifest文件里面注冊一個BroadcastReceiver,來監(jiān)聽這些變化,并適當?shù)鼗謴?fù)(或掛起)你的后臺更新:

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

設(shè)備的網(wǎng)絡(luò)變化可能會比較頻繁,因此每當你在移動網(wǎng)絡(luò)與Wi-Fi之間切換的時候,這一廣播就會被觸發(fā)。因此,我們可以僅在之前的更新或者下載任務(wù)被掛起的時候去監(jiān)聽這一廣播(用來恢復(fù)那些任務(wù))。通常我們可以在開始更新前檢查一下網(wǎng)絡(luò)連接,如果當前沒有連接到互聯(lián)網(wǎng),那么就將更新任務(wù)掛起,直到連接恢復(fù)。

上述方法會涉及到Broadcast Receiver開啟狀態(tài)的切換,這一內(nèi)容會在下一節(jié)課中展開。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號