2010-09-11 9 views
9

Escribí un widget para Android y estoy tratando de obtener el nivel de la batería. He intentado usarobtener nivel de batería en el widget de Android

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

pero me sale el error: " componentes IntentReceiver no se les permite registrarse para recibir las intenciones"

¿Por qué? el ACTION_BATTERY_CHANGED es un intento pegajoso y no registro un receptor (nulo en el primer parámetro).

¿Alguna solución alternativa?

Gracias.

+0

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

Respuesta

8

hackbod dio la solución a los comentarios:

"utilizar getApplicationContext() registerReciever()".

3

Ummmm ... eso se siente como un error. Deben estar haciendo el control is-a-BroadcastRecevier demasiado pronto. Es posible que desee crear un proyecto que demuestre el problema, luego publíquelo en b.android.com.

En términos de una solución:

Paso # 1: Crear una IntentService

Paso # 2: En onHandleIntent(), hacer su trabajo real de actualización flash, incluyendo la obtención del nivel de la batería

Paso # 3: Tener onUpdate() de su AppWidgetProvider solo llame al startService() en su IntentService.

+12

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

+0

@hackbod: En este caso, 'getApplicationContext()' se comportaría de manera diferente que el 'Context' que' onReceive() 'se pasa? – CommonsWare

+0

@hackbod: funcionó! ¡Gracias! – Ran

Cuestiones relacionadas