Pregunta

¿Hay alguna forma de obtener información de la batería desde el SDK de Android? Como la vida de la batería restante y así sucesivamente? No puedo encontrarlo a través de los documentos.

¿Fue útil?

Solución

Puede registrar un receptor de Intent 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á capturarla incluso después del momento en que se produce el cambio de estado de la batería.

Otros consejos

Este es un ejemplo rápido que le dará 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): el nivel es de 40/100, la temperatura es de 320, el voltaje es de 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 aquí es lo que se me ocurrió. Lo estoy poniendo aquí en caso de que alguien tenga un requisito similar. (He probado esto y funciona muy 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top