W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
重復(fù)鬧鐘和后臺服務(wù)最常見的功能之一,是用來從網(wǎng)絡(luò)上獲取應(yīng)用更新,存儲(chǔ)數(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ò)連接,那么就沒有必要做那些需要聯(lián)網(wǎng)的事情。下面的代碼片段展示了如何通過ConnectivityManager檢查當(dāng)前活動(dòng)的網(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();
我們還可以獲取到當(dāng)前的網(wǎng)絡(luò)連接類型。
設(shè)備通??梢杂幸苿?dòng)網(wǎng)絡(luò),WiMax,Wi-Fi與以太網(wǎng)連接等類型。通過查詢當(dāng)前活動(dòng)的網(wǎng)絡(luò)類型,可以根據(jù)網(wǎng)絡(luò)的帶寬對更新頻率進(jìn)行調(diào)整:
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
移動(dòng)網(wǎng)絡(luò)的使用費(fèi)會(huì)比Wi-Fi更高,所以多數(shù)情況下,如果設(shè)備正在使用移動(dòng)網(wǎng)絡(luò),我們應(yīng)該減少應(yīng)用的更新頻率;同樣地,還應(yīng)該臨時(shí)地掛起一些文件下載任務(wù)直到有Wi-Fi連接時(shí)再繼續(xù)下載。
如果已經(jīng)關(guān)閉了更新操作,那么需要監(jiān)聽網(wǎng)絡(luò)連接的變化,這樣就可以在建立了互聯(lián)網(wǎng)訪問之后,重新恢復(fù)它們。
當(dāng)網(wǎng)絡(luò)連接發(fā)生改變時(shí),ConnectivityManager會(huì)廣播CONNECTIVITY_ACTION(android.net.conn.CONNECTIVITY_CHANGE
)的Action消息。 我們可以在Manifest文件里面注冊一個(gè)BroadcastReceiver,來監(jiān)聽這些變化,并適當(dāng)?shù)鼗謴?fù)(或掛起)你的后臺更新:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
設(shè)備的網(wǎng)絡(luò)變化可能會(huì)比較頻繁,因此每當(dāng)你在移動(dòng)網(wǎng)絡(luò)與Wi-Fi之間切換的時(shí)候,這一廣播就會(huì)被觸發(fā)。因此,我們可以僅在之前的更新或者下載任務(wù)被掛起的時(shí)候去監(jiān)聽這一廣播(用來恢復(fù)那些任務(wù))。通常我們可以在開始更新前檢查一下網(wǎng)絡(luò)連接,如果當(dāng)前沒有連接到互聯(lián)網(wǎng),那么就將更新任務(wù)掛起,直到連接恢復(fù)。
上述方法會(huì)涉及到Broadcast Receiver開啟狀態(tài)的切換,這一內(nèi)容會(huì)在下一節(jié)課中展開。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: