2010-09-11 11 views
9

Ho scritto un widget per Android e sto cercando di ottenere il livello della batteria. Ho provato conottenere il livello della batteria nel widget Android

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

ma ottengo l'errore: " componenti IntentReceiver non sono autorizzati a registrarsi per ricevere gli intenti"

Perché? il ACTION_BATTERY_CHANGED è un intento persistente e non registro un ricevitore (null nel primo parametro).

Qualsiasi soluzione alternativa?

Grazie.

+0

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

risposta

8

hackbod ha dato la soluzione ai commenti:

"utilizzare getApplicationContext() registerReciever()."

3

Ummmm ... che sembra un insetto. Devono eseguire il controllo is-a-BroadcastRecevier troppo presto. Potresti voler creare un progetto che mostri il problema, quindi pubblicarlo a b.android.com.

In termini di una soluzione alternativa:

Passo # 1: Creare un IntentService

Passo # 2: In onHandleIntent(), fare il vostro lavoro widget di aggiornamento vero e proprio, compreso ottenere il livello della batteria

Passo # 3: disponi del onUpdate() del tuo AppWidgetProvider e chiama il numero startService() sul tuo IntentService.

+12

O semplicemente usa getApplicationContext(). registerReciever(). – hackbod

+0

@hackbod: In questo caso, 'getApplicationContext()' si comporterebbe in modo diverso rispetto al 'Contesto' in cui' onReceive() 'viene passato? – CommonsWare

+0

@hackbod: ha funzionato! Grazie! – Ran