studio programacion móviles desarrollo curso code aplicaciones java android battery

java - programacion - Obtén nivel de batería y estado en Android



manual de programacion android pdf (8)

¿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?


Desde API 21, ha sido posible 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);


Después de investigar MÁS, encontré BatteryManager.EXTRA_LEVEL.


No tiene que registrar un BroadcastReceiver real ya que BatteryManager de Android está usando un Intento adhesivo:

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 .


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); }


Según los documentos oficiales de Android , puede usar 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); }


prueba esta función sin necesidad de permiso ni ningún receptor

void getBattery_percentage() { IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter); int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float)scale; float p = batteryPct * 100; Log.d("Battery percentage",String.valueOf(Math.round(p))); }


Here hay un ejemplo de código que explica cómo obtener información de la batería.

Para resumir, 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)); } }


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); }