Obtenga nivel y estado de la batería en Android
¿Cómo puedo obtener el nivel y el estado de la batería (enchufado, descarga, carga, etc.)? Investigué los documentos del desarrollador y encontré una clase BatteryManager. Pero no contiene ningún método, sólo constantes. ¿Cómo lo uso?
- Haga clic en la mitad superior de un botón - no funciona?
- AndEngine - Kill Sprite después de X segundos?
- No se encontró ningún identificador de recurso para el atributo 'showAsAction' en el paquete 'android'
- ¿Cómo puedo hacer conexiones de URL asíncronas en Android?
- ¿Es necesario mantener las clases del mismo paquete en el mismo dex mientras se utilizan múltiples archivos dex
- Cuando se utiliza GLES20.glReadPixels en android, los datos devueltos por él no son exactamente iguales con la vista previa en vivo
- AudioTrack en modo de transmisión MODE_STREAMING
- Regex para determinar las tarjetas de crédito en Android
- GCM Mantenga mensajes en el servidor hasta que llegue uno nuevo
- Widget no se actualiza después de cambios de configuración
- Android: ¿Cómo comparar el recurso de una imagen con R.drawable.imagename?
- Eclipse ADT Plugin - Herramienta de diseño gráfico retrasada y memoria
- El ayudante emergente del menú no se puede utilizar sin ancla
Aquí hay un ejemplo de código que explica cómo obtener información sobre la batería: http://www.tutorialforandroid.com/2009/01/getting-battery-information-on-android.html
Para resumir, un receptor de difusión para la intención ACTION_BATTERY_CHANGED
se configura de forma dinámica, ya que no se puede recibir a través de componentes declarados en manifestos, sólo mediante el registro explícito para ello 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)); } }
Desde la API 21 se ha podido utilizar lo siguiente 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);
Basado en documentos oficiales de Android , puede utilizar este método en una clase de ayuda o util para obtener el porcentaje de batería actual:
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); }
Puede usar esto para obtener la carga 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); }
Después de algunos más de investigación, he encontrado BatteryManager.EXTRA_LEVEL.
Usted no tiene que registrar un BroadcastReceiver real como BatteryManager de Android está usando una intención pegajosa:
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 de los documentos oficiales en https://developer.android.com/training/monitoring-device-state/battery-monitoring.html .
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); }
- ¿Por qué adb vuelve a estar sin conexión después de la cadena del dispositivo?
- Cómo dibujar círculo por lienzo en Android?