2012-02-03 11 views
5

Istnieją dwa sposoby, dzięki którym odbiornik telewizyjny jest znany systemowi: Jeden deklaruje go w pliku manifestu za pomocą tego elementu. Druga polega na dynamicznym tworzeniu odbiornika w kodzie Java.Odbiornik emisji baterii zadeklarowany w pliku manifestu nie działa?

Teraz odbiornik został utworzony dynamicznie w kodzie java i działa normalnie. Ale dlaczego nie zadziałał pierwszy sposób "Deklaracja w pliku manifestu"?

Czy jest ktoś, kto odniesie sukces?

Dzięki.

AndroidManifest.xml

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

Odpowiedz

4

przypadku niektórych działań, to tylko mógł zadeklarować BroadcastReceiver w kodzie Java. Dzieje się tak z działaniem BATTERY_CHANGED i o ile wiem.

Po zadeklarowaniu BroadcastReceiver w pliku Manifest.xml, bez względu na to, czy aplikacja jest uruchomiona, program BroadcastReceiver zostanie przebudzony, co spowoduje wywołanie metody onReceive.

Dlaczego? Myślę, że dzieje się tak, ponieważ akcja BATTERY_CHANGED jest bardzo rozpowszechniona i jeśli możesz ją zadeklarować w Manifeście, system będzie często wysyłał dużo emisji, a tym samym dramatycznie zużywa baterię, jednak gdy zadeklarujesz w kodzie, broadcastReceiver będzie działać tylko wtedy, gdy aktywność jest uruchomiona, co pozwoli uniknąć ekstremalnego zużycia baterii. Aby oszczędzać baterię, Android nie zezwala na rejestrowanie takich działań w pliku.

To tylko moje przypuszczenie. Nie widziałem żadnych oficjalnych wyjaśnień na ten temat. Jako programista po prostu zapamiętuję takie działania, a nie przyczyny.

+1

Oh .. Chciałbym wiedzieć "DLACZEGO". Dzięki za odpowiedź! – Sodino

Powiązane problemy