2010-09-11 8 views
9

Ich schrieb ein Widget für Android und ich versuche, den Akkustand zu bekommen. Ich habe versucht,Akku-Level bei Android-Widget bekommen

Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

verwenden, aber ich bekomme die Fehlermeldung: „IntentReceiver Komponenten dürfen nicht Intents registrieren zu erhalten“

Warum? ACTION_BATTERY_CHANGED ist eine klebrige Absicht und ich registriere keinen Empfänger (null im ersten Parameter).

Problemumgehung?

Danke.

+0

android Bug? http://code.google.com/p/android/issues/detail?id=5111 – Ran

Antwort

8

hackbod gab die Lösung bei den Kommentaren:

"getApplicationContext() verwenden, registerReciever()."

3

Ummmmm ... das fühlt sich an wie ein Käfer. Sie müssen das tun, ist die BroadcastRecevier Überprüfung zu früh. Möglicherweise möchten Sie ein Projekt erstellen, das das Problem veranschaulicht, und dieses dann an b.android.com senden.

In Bezug auf dieses Problem zu umgehen:

Schritt 1: Erstellen Sie eine IntentService

Schritt # 2: In onHandleIntent(), tun Sie Ihre tatsächliche Widget Update Arbeit, einschließlich der Ladezustand der Batterie immer

Schritt # 3: Haben onUpdate() von Ihrem AppWidgetProvider rufen Sie einfach startService() auf Ihrem IntentService.

+12

Oder verwenden Sie einfach getApplicationContext(). registerReciever(). – hackbod

+0

@hackbod: In diesem Fall würde sich 'getApplicationContext()' anders verhalten als der 'Kontext', der 'onReceive()' übergeben wird? – CommonsWare

+0

@hackbod: es hat funktioniert! Vielen Dank! – Ran