編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
監(jiān)測設備狀態(tài)變化最簡單的方法,是為你所要監(jiān)聽的每一個狀態(tài)創(chuàng)建一個BroadcastReceiver,并在Manifest文件中注冊它們。之后就可以在每一個BroadcastReceiver中,根據(jù)當前設備的狀態(tài)調(diào)整一些計劃任務。
上述方法的副作用是:一旦你的接收器收到了廣播,應用就會喚醒設備。喚醒的頻率可能會遠高于需要的頻率
更好的方法是在程序運行時開啟或者關(guān)閉BroadcastReceiver。這樣的話,你就可以讓這些接收器僅在需要的時候被激活。
我們可以使用PackageManager來切換任何一個在Mainfest里面定義好的組件的開啟狀態(tài)。通過下面的方法可以開啟或者關(guān)閉任何一個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)絡連接已經(jīng)斷開,那么可以在這個時候關(guān)閉除了監(jiān)聽網(wǎng)絡狀態(tài)變化的接收器之外的其它所有接收器。
相反的,一旦重新建立網(wǎng)絡連接,我們可以停止監(jiān)聽網(wǎng)絡連接的改變,而僅僅在執(zhí)行需要聯(lián)網(wǎng)的操作之前判斷當前網(wǎng)絡是否可以用。
同樣地,你可以使用上面的技術(shù)來暫緩一個需要更高帶寬的下載任務。這僅需要啟用一個監(jiān)聽網(wǎng)絡連接變化的BroadcastReceiver,并在連接到Wi-Fi時,初始化下載任務。