¿Cómo cambiar el nivel de la batería en Android (solo cuando hay un cambio de nivel/porcentaje)?

¿Hay alguna manera de obtener el nivel de la batería solo cuando cambia el nivel?

Sé cómo obtener la información de la batería usando Intent.ACTION_BATTERY_CHANGED y luego comparo el nivel de batería con el último nivel de batería (que guardé antes) en caso de que sea igual a No hago nada más, hago mis cosas.

Yo tambien se que ACTION_BATTERY_CHANGED sucede cuando hay un cambio de información de la batería (no solo el nivel), por lo que necesito verificar el nivel. No sé por qué, pero a veces no funciona bien.

Hay una mejor manera de hacerlo?

preguntado el 22 de mayo de 12 a las 20:05

¿A qué te refieres con "no funciona bien"? ¿Echa de menos las transmisiones? ¿O no cambió nada cuando te dieron uno? -

No lo sé exactamente porque no sucedió en mi teléfono y no pude recrearlo. pero creo que el cheque que hice no paso bien asi que queria saber si hay alguna otra forma de hacerlo? -

1 Respuestas

No hay otra forma (documentada) de obtener el nivel de la batería. Simplemente ignore la transmisión cuando el nivel no haya cambiado. Como ya lo haces.

Puede obtener el último estado inmediatamente con lo siguiente:

IntentFilter batIntentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent battery = this.registerReceiver(null, batIntentFilter);
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
Log.d("TAG", "Current Level: " + level);

contestado el 22 de mayo de 12 a las 23:05

¿Necesito desregistrarla? El receptor es nulo, así que creo que no, ¿es correcto? - Alex Kapustian

Lo probé y no funciona. Llamé a esto desde otro receptor de batería_cambiada y me da el mismo nivel... y no el último. - Alex Kapustian

Sí, sé lo que quisiste decir, no funcionó. Obtuve el nivel actual y no el último\más reciente. Por ejemplo: después de que el nivel de la batería cambió de 84 a 85, usando su código obtengo 85 en lugar de 84. - Alex Kapustian

¿Cómo es que no es el último (también conocido como el más nuevo) nivel informado? Si desea tener acceso al último pero un nivel (el nivel anterior al último) simplemente escriba el último en SharedPreferences y léalo desde allí cuando lo obtenga la próxima vez. - Dirk Jackel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.