W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
監(jiān)測(cè)設(shè)備狀態(tài)變化最簡(jiǎn)單的方法,是為你所要監(jiān)聽的每一個(gè)狀態(tài)創(chuàng)建一個(gè)BroadcastReceiver,并在Manifest文件中注冊(cè)它們。之后就可以在每一個(gè)BroadcastReceiver中,根據(jù)當(dāng)前設(shè)備的狀態(tài)調(diào)整一些計(jì)劃任務(wù)。
上述方法的副作用是:一旦你的接收器收到了廣播,應(yīng)用就會(huì)喚醒設(shè)備。喚醒的頻率可能會(huì)遠(yuǎn)高于需要的頻率
更好的方法是在程序運(yùn)行時(shí)開啟或者關(guān)閉BroadcastReceiver。這樣的話,你就可以讓這些接收器僅在需要的時(shí)候被激活。
我們可以使用PackageManager來(lái)切換任何一個(gè)在Mainfest里面定義好的組件的開啟狀態(tài)。通過(guò)下面的方法可以開啟或者關(guān)閉任何一個(gè)BroadcastReceiver:
ComponentName receiver = new ComponentName(context, myReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP)
使用這種技術(shù),如果我們確定網(wǎng)絡(luò)連接已經(jīng)斷開,那么可以在這個(gè)時(shí)候關(guān)閉除了監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化的接收器之外的其它所有接收器。
相反的,一旦重新建立網(wǎng)絡(luò)連接,我們可以停止監(jiān)聽網(wǎng)絡(luò)連接的改變,而僅僅在執(zhí)行需要聯(lián)網(wǎng)的操作之前判斷當(dāng)前網(wǎng)絡(luò)是否可以用。
同樣地,你可以使用上面的技術(shù)來(lái)暫緩一個(gè)需要更高帶寬的下載任務(wù)。這僅需要啟用一個(gè)監(jiān)聽網(wǎng)絡(luò)連接變化的BroadcastReceiver,并在連接到Wi-Fi時(shí),初始化下載任務(wù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: