2010-09-11 36 views
9

J'ai écrit un widget pour Android et j'essaie d'obtenir le niveau de la batterie. J'ai essayé d'utiliserobtenir le niveau de la batterie au widget android

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

mais je reçois l'erreur: « composants IntentReceiver ne sont pas autorisés à vous inscrire pour recevoir les intentions »

Pourquoi? l'ACTION_BATTERY_CHANGED est une intention collante et je n'enregistre pas de récepteur (nul dans le premier paramètre).

Une solution de contournement?

Merci.

+0

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

Répondre

8

hackbod a donné la solution aux commentaires:

"utiliser getApplicationContext() registerReciever()."

3

Ummmm ... qui ressemble à un bug. Ils doivent faire le test is-a- BroadcastRecevier trop tôt. Vous pouvez créer un projet qui illustre le problème, puis le publier sur b.android.com.

En termes d'une solution de contournement:

Étape # 1: Créer un IntentService

Étape # 2: onHandleIntent(), faites votre travail de mise à jour widget réelle, y compris obtenir le niveau de la batterie

Étape # 3: Avez onUpdate() de votre AppWidgetProvider il suffit d'appeler startService() sur votre IntentService.

+12

Ou utilisez simplement getApplicationContext(). registerReciever(). – hackbod

+0

@hackbod: Dans ce cas, 'getApplicationContext()' se comporterait différemment de 'Context' que' onReceive() 'se ferait passer? – CommonsWare

+0

@hackbod: ça a marché! Merci! – Ran