Question

Existe-t-il un moyen d'obtenir des informations sur la batterie à partir du SDK Android? Tels que la vie de la batterie restante et ainsi de suite? Je ne parviens pas à le trouver dans la documentation.

Était-ce utile?

La solution

Vous pouvez enregistrer un récepteur Intent pour qu'il reçoive la diffusion pour ACTION_BATTERY_CHANGED: http : //developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . Les docs disent que la diffusion est collante, vous pourrez donc la récupérer même après le changement d'état de la batterie.

Autres conseils

Voici un exemple rapide qui vous indiquera la quantité de batterie utilisée, sa tension et sa température.

Collez le code suivant dans une activité:

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

Sur mon téléphone, la sortie suivante est émise toutes les 10 secondes:

ERREUR / BatteryManager (795): le niveau est 40/100 temp est 320, la tension est 3848

Cela signifie donc que la batterie est remplie à 40%, à une température de 32,0 degrés Celsius et à une tension de 3,848 volts.

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

Je devais avoir un moniteur sur la batterie et vérifier le niveau et l'état. Je développe sur MonoForAndroid, alors voici ce que je suis venu avec. Je le mets ici au cas où quelqu'un aurait une exigence similaire. (J'ai testé cela et fonctionne 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top