Batería Android en SDK

¿Hay alguna manera de obtener información de la batería del SDK de Android? Como la duración de la batería restante, etc. No puedo encontrarlo a través de los documentos.

Puede registrar un receptor de intención para recibir la transmisión de ACTION_BATTERY_CHANGED: http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . Los documentos dicen que la transmisión es pegajosa, por lo que podrás tomarla incluso después del cambio de estado de la batería.

Aquí hay un ejemplo rápido que le indicará la cantidad de batería utilizada, el voltaje de la batería y su temperatura.

Pegue el siguiente código en una actividad:

@Override public void onCreate() { BroadcastReceiver batteryReceiver = new BroadcastReceiver() { int scale = -1; int level = -1; int voltage = -1; int temp = -1; @Override public void onReceive(Context context, Intent intent) { level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage); } }; IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); registerReceiver(batteryReceiver, filter); } 

En mi teléfono, esto tiene la siguiente salida cada 10 segundos:

ERROR/BatteryManager(795): level is 40/100 temp is 320, voltage is 3848

Esto significa que la batería está llena al 40%, tiene una temperatura de 32.0 grados centígrados y tiene un voltaje de 3.848 voltios.

  public static String batteryLevel(Context context) { Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); int percent = (level*100)/scale; return String.valueOf(percent) + "%"; } 

Necesitaba tener un monitor en la batería y verificar el nivel y el estado. Estoy desarrollando en MonoForAndroid, así que esto es lo que se me ocurrió. Lo estoy poniendo aquí en caso de que alguien tenga un requisito similar. (He probado esto y funciona bien).

 try { var ifilter = new IntentFilter(Intent.ActionBatteryChanged); Intent batteryStatusIntent = Application.Context.RegisterReceiver(null, ifilter); var batteryChangedArgs = new AndroidBatteryStateEventArgs(batteryStatusIntent); _Battery.Level = batteryChangedArgs.Level; _Battery.Status = batteryChangedArgs.BatteryStatus; } catch (Exception exception) { ExceptionHandler.HandleException(exception, "BatteryState.Update"); throw new BatteryUpdateException(); } namespace Leopard.Mobile.Hal.Battery { public class AndroidBatteryStateEventArgs : EventArgs { public AndroidBatteryStateEventArgs(Intent intent) { Level = intent.GetIntExtra(BatteryManager.ExtraLevel, 0); Scale = intent.GetIntExtra(BatteryManager.ExtraScale, -1); var status = intent.GetIntExtra(BatteryManager.ExtraStatus, -1); BatteryStatus = GetBatteryStatus(status); } public int Level { get; set; } public int Scale { get; set; } public BatteryStatus BatteryStatus { get; set; } private BatteryStatus GetBatteryStatus(int status) { var result = BatteryStatus.Unknown; if (Enum.IsDefined(typeof(BatteryStatus), status)) { result = (BatteryStatus)status; } return result; } } } #region Internals public class AndroidBattery { public AndroidBattery(int level, BatteryStatus status) { Level = level; Status = status; } public int Level { get; set; } public BatteryStatus Status { get; set; } } public class BatteryUpdateException : Exception { } #endregion 
    Intereting Posts