¿Cómo puedo obtener el nivel y el estado de la batería (enchufado, descargando, cargando, etc.)? Investigué los documentos del desarrollador y encontré una clase BatteryManager. Pero no contiene ningún método, solo constantes. ¿Cómo lo uso?Obtener nivel de batería y estado en Android
Respuesta
Here es un ejemplo de código que explica cómo obtener información de la batería.
En resumen, un receptor de difusión para el intento ACTION_BATTERY_CHANGED
se configura dinámicamente, porque no se puede recibir a través de componentes declarados en manifiestos, solo registrándolo explícitamente con Context.registerReceiver()
.
public class Main extends Activity {
private TextView batteryTxt;
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context ctxt, Intent intent) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
batteryTxt.setText(String.valueOf(level) + "%");
}
};
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
batteryTxt = (TextView) this.findViewById(R.id.batteryTxt);
this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
}
Después de investigar MÁS, encontré BatteryManager.EXTRA_LEVEL.
favor explicar cómo hacer uso de ella. – phreakhead
Puede usar esto para obtener el cargo restante en porcentaje.
private void batteryLevel() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int level = -1;
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100)/scale;
}
batterLevel.setText("Battery Level Remaining: " + level + "%");
}
};
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
private void batteryLevel() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int rawlevel = intent.getIntExtra("level", -1);
int scale = intent.getIntExtra("scale", -1);
int level = -1;
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100)/scale;
}
mBtn.setText("Battery Level Remaining: " + level + "%");
}
};
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
Desde API 21 de su sido posible utilizar estos procedimientos para obtener el nivel actual de la batería como un porcentaje:
BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
Usted no tiene que registrar una BroadcastReceiver real, BatteryManager de Android es utilizando una pegajosa Intención:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level/(float)scale;
return (int)(batteryPct*100);
Esto es a partir de los documentos oficiales sobre al https://developer.android.com/training/monitoring-device-state/battery-monitoring.html.
simplemente use 'level', no necesita escala, etc. –
Basado en official android docs, puede utilizar este método en una clase o ayudante Util para obtener el porcentaje actual de la batería:
public static int getBatteryPercentage(Context context) {
IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, iFilter);
int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;
float batteryPct = level/(float) scale;
return (int) (batteryPct * 100);
}
- 1. obtener nivel de batería en el widget de Android
- 2. Nivel de batería en Phonegap
- 3. ¿Cómo obtener el estado de la batería?
- 4. InstallShield nivel de batería advertencia
- 5. Mac - Obtener estado de carga/batería (enchufado o no)
- 6. ¿Estado de la batería en OSX?
- 7. Batería Android en el SDK
- 8. Obtener la temperatura de la batería en android
- 9. Detectar cambiar el estado de la batería en cada porcentaje en android
- 10. Obtener nivel de la batería antes de que responde receptor de radiodifusión para Intent.ACTION_BATTERY_CHANGED
- 11. determinar el nivel de la batería iPhone precisa
- 12. ¿Cómo obtener estadísticas de la batería en Android en tiempo de ejecución?
- 13. ¿Cómo obtener nivel de batería en un dispositivo con Windows Phone 8?
- 14. Simulación de batería baja y poca memoria en Android
- 15. ¿Cómo quitar el ícono de la batería en la barra de estado de Android?
- 16. ¿Cómo puedo obtener el nivel de batería dentro de un módulo kernel de Linux?
- 17. Deshabilitar la ventana emergente de "batería baja" de Android
- 18. estado de la batería no se está cargando
- 19. Crear "intención de uso de batería" android
- 20. Android Perfil de uso de la batería
- 21. ¿Los receptores de difusión Android consumen batería?
- 22. Cómo obtener el nivel de la batería en tiempo real en IOS con una granularidad de 1%
- 23. cómo medir y mejorar el uso de la batería en el iPhone/iPad (también en Android)
- 24. Redes de nivel de paquetes en Android
- 25. cómo llegar temperatura de la batería en Android
- 26. Cómo obtener información sobre el uso de la batería de Android mediante la aplicación
- 27. rosca y el consumo de la batería
- 28. Obtener los valores actuales de la batería para el teléfono Android
- 29. Informe de uso de la batería de Android para desarrolladores
- 30. ¿Dónde debería guardar mi estado de nivel de juego?
Acerca de Intent.ACTION_BATTERY_CHANGED: Esta es una emisión adhesiva que contiene el estado de carga, el nivel y otra información sobre la batería. No puede recibir esto a través de componentes declarados en manifiestos, solo registrándose explícitamente con Context.registerReceiver(). –
@classAndroid Bueno, sí, eso está explícitamente establecido en la respuesta. – SirDarius
Sí @SirDarius, solo para que otros lo sepan. Levanto tu respuesta primero y pongo este comentario cuando lo descubrí. :) –