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?

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); } 
  • Android: capitalize no funciona
  • Java.net.SocketException: Familia de direcciones no soportada por el protocolo en el emulador android
  • ¿Cuál es la mejor manera de soportar apis de Google Maps (v1 y v2)?
  • Cómo agregar tres niveles ListView en ExpandableListView en android
  • Mejor manera de acceder a la base de datos en la aplicación multi-threaded Android?
  • Cambiar String-Array en Strings.xml a ArrayList
  • Cómo manejar ConcurrentModificationException en Android
  • Sabores de productos dependencia Android de Gradle
  • NameValuePair, HttpParams, HttpConnection Parámetros obsoletos en la clase de solicitud del servidor para la aplicación de inicio de sesión
  • Cómo convertir doble a 2 número después del punto?
  • Adición de objetos independientes a una RealmList
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.