获取电池电量

时间:2019-01-04 11:41:53

标签: android battery

我知道有很多这样的问题,但是无论是否可行,我都需要一个具体的答案。

我想为任何Android手机获取以mAh为单位的当前可用电池电量。这对我的项目至关重要。我尝试了BatteryManager。

batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);

它确实提供了我需要的信息,但仅适用于某些设备。

我还尝试通过Java Reflection使用PowerProfile。

public void getBatteryCapacity() {
    Object mPowerProfile_ = null;

    final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";

    try {
        mPowerProfile_ = Class.forName(POWER_PROFILE_CLASS)
                .getConstructor(Context.class).newInstance(this);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        double batteryCapacity = (Double) Class
                .forName(POWER_PROFILE_CLASS)
                .getMethod("getAveragePower", java.lang.String.class)
                .invoke(mPowerProfile_, "battery.capacity");
        Toast.makeText(OffloadeeActivity.this, batteryCapacity + " mAh",
                Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是它提供了总电池容量。我需要的是当前剩余的电池电量。 有什么通用的方法可以为每台设备获得该功能吗?任何图书馆也可以。

2 个答案:

答案 0 :(得分:0)

您尝试此操作将对您有所帮助

public static int getBatteryPercentage(Context context) {

    IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, iFilter);

    int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
    int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;

    float batteryPct = level / (float) scale;

    return (int) (batteryPct * 100);
}

答案 1 :(得分:0)

这可以通过获得以毫安小时为单位的总电池容量,然后找到电池电量的百分比,最后将它们相乘得出当前以毫安小时为单位的电池寿命来实现。以下代码块是用于获取电池的总容量(以毫安小时为单位)的功能:

public double getBatteryCapacity(Context context) {
    Object mPowerProfile;
    double batteryCapacity = 0;
    final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";

    try {
        mPowerProfile = Class.forName(POWER_PROFILE_CLASS)
            .getConstructor(Context.class)
            .newInstance(context);

    batteryCapacity = (double) Class
            .forName(POWER_PROFILE_CLASS)
            .getMethod("getBatteryCapacity")
            .invoke(mPowerProfile);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return batteryCapacity;
}

现在您已具备电池容量,您可以找到当前电池寿命百分比,然后将其乘以总容量即可得到毫安小时的电量

BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

如果要以浮点数的形式返回电池电量百分比(示例89.92%),则可以使用以下代码:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batLevel = (float) level / (float) scale;

现在,您可以执行以下操作来获得毫安小时的电池寿命

int batteryInMilliamps = getBatteryCapacity(getApplicationContext()) * batLevel;

如果您有任何问题或疑问,请在下面发表评论。