在Android中获取电池电量和状态

146

我该如何获取电池的电量和状态(插入、放电、充电等)?我查阅了开发人员文档,找到了一个BatteryManager类。但它并不包含任何方法,只有常量。我该如何使用它呢?


经过更多的研究,我找到了BatteryManager.EXTRA_LEVEL。 - Mohit Deshpande
12个回答

1
private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                mBtn.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

0

基于这些很棒的答案,我修改了getBatteryPercentage函数。顺便说一句,我使用了“Carlson Notation”代码格式化,因为它更容易快速阅读。

public static String getBatteryPercentage(Context context)
{
    String bstatus       = "isChrg=false usbChrg=false acChrg=false wlChrg=false 0% t=70°F";
    IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, iFilter);
    int status           = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging   = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                           status == BatteryManager.BATTERY_STATUS_FULL;
    int level            = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale            = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
    float batteryPct     = level * 100 / (float)scale;
    //How are we charging?
    int chargePlug       = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    boolean usbCharge    = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
    boolean acCharge     = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
    boolean wlCharge     = chargePlug == BatteryManager.BATTERY_PLUGGED_WIRELESS;
    int temp             = batteryStatus.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);
    float tempTwo        = ((float) temp) / 10;
    double d             = CelsiusToFahrenheit(tempTwo);
    bstatus              = String.format(Locale.US, "isChrg=%b usbChrg=%b acChrg=%b wlChrg=%b %.0f%% t=%.2f°F",
                           isCharging,
                           usbCharge,
                           acCharge,
                           wlCharge,
                           batteryPct,
                           d);
    return bstatus;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接