it-swarm.com.de

Android-Batterie im SDK

Gibt es eine Möglichkeit, Batterieinformationen vom Android-SDK abzurufen? Wie verbleibende Akkulaufzeit und so weiter? Ich kann es nicht durch die Dokumente finden.

27
Jeremy Edwards

Sie können einen Intent-Empfänger für den Empfang der Übertragung für ACTION_BATTERY_CHANGED registrieren: http://developer.Android.com/reference/Android/content/Intent.html#ACTION_BATTERY_CHANGED . Die Dokumente sagen, dass die Sendung klebrig ist, so dass Sie sie auch nach dem Moment des Wechselns des Batteriezustands nutzen können.

23
Jarett Millard

Hier ein kurzes Beispiel, das Ihnen die verbrauchte Batterie, die Batteriespannung und die Temperatur angibt.

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

@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 Telefon hat dies alle 10 Sekunden die folgende Ausgabe:

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

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

67
plowman
    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) + "%";
    }
2
XXX

Ich musste einen Monitor an der Batterie haben und den Füllstand und den Status überprüfen. Ich entwickle MonoForAndroid, also habe ich mir das hier ausgedacht. Ich stelle es hier für den Fall, dass jemand eine ähnliche Anforderung hat. (Ich habe das 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
0
Has AlTaiar