Frage

Gibt es eine Möglichkeit Batterieinformationen aus dem Android SDK zu bekommen? Wie die verbleibende Batteriekapazität und so weiter? Ich kann es nicht durch die Dokumentation finden.

War es hilfreich?

Lösung

Sie können einen Intent-Empfänger registrieren die Sendung für ACTION_BATTERY_CHANGED zu erhalten: http : //developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . Die docs sagen, dass die Sendung klebrig ist, so Sie in der Lage sein, werden es auch nach dem Zeitpunkt der Batteriezustandsänderung auftritt, zu greifen.

Andere Tipps

Hier ist ein kurzes Beispiel, dass Sie die Menge der verwendeten Batterie erhalten, die Batteriespannung und die Temperatur.

Fügen Sie den folgenden Code in eine Aktivität:

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

Auf meinem Handy, das hat die folgende Ausgabe alle 10 Sekunden:

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

Dies bedeutet also, dass die Batterie 40% voll ist, eine Temperatur von 32,0 Grad Celsius hat, und hat Spannung von 3,848 Volt.

    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) + "%";
    }

Ich brauchte einen Monitor an der Batterie haben und die Ebene und den Status zu überprüfen. Ich entwickle auf MonoForAndroid, hier so ist, was ich kam mit. Ich stelle es hier, wenn jemand eine ähnliche Anforderung haben. (Ich habe dies getestet und funktioniert gut).

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top