Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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?

  • Cómo configurar una frecuencia para la radio fm en android?
  • Error al entregar el resultado ResultInfo
  • ¿Cómo deshacerse de la advertencia de llamada sospechosa en Android Studio?
  • Cómo crear una tabla en Android con varias columnas?
  • Calender.getInstance () da error en Android Studio
  • Java.net.ConnectException: no se pudo conectar con /192.168.253.3 (puerto 2468): connect failed: ECONNREFUSED (Connection refused)
  • Deshabilitar el botón Inicio en la aplicación de pantalla de inicio?
  • Android Preferences error, "String no se puede convertir en int"
  • 7 Solutions collect form web for “Obtenga nivel y estado de la batería en Android”

    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); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.