2012-02-03 66 views
5

有兩種方法可以讓系統知道廣播接收機:一種是在清單文件中用這個元素聲明它。另一種是在java代碼中動態創建接收器。清單文件中聲明的電池廣播接收器不起作用?

現在,接收器已經在java代碼中動態創建,並且它能正常工作。但是爲什麼第一種方式「聲明在清單文件中」失敗?

有沒有人能成功?

謝謝。

AndroidManifest.xml中

<receiver android:name="pj.batteryinfo.BatteryReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BATTERY_CHANGED"></action> 
    </intent-filter> 
</receiver> 

回答

4

對於某些操作,您只能聲明在Java代碼中的廣播接收器。就我所知,這發生在BATTERY_CHANGED動作和SCREEN_ON,SCREEN_OFF

當您在Manifest.xml文件中聲明BroadcastReceiver時,無論您的應用程序是否正在運行,BroadcastReceiver都會被喚醒,因此將調用onReceive方法。

爲什麼?我認爲這是因爲BATTERY_CHANGED動作非常常見,如果您可以在Manifest中聲明它,系統通常會發送大量廣播,從而大幅消耗電池電量;但是,當您聲明它在代碼中,broadcastReceiver只有在活動運行時纔有效,從而避免極端的電池消耗。爲了節省電池,Android不允許在文件中註冊此類操作。

這只是我的猜測。我沒有看到這方面的官方解釋。作爲一名開發人員,我只是記住這些行爲,而不是背後的原因。

+1

哦..我想知道'爲什麼'。感謝您的回覆! – Sodino 2012-02-03 04:51:23