Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Total Battery Capacity in mAh of device Programmatically

I have tried powerprofile of Android....I have tried this code...but it gives me 1000 answer every time in all the devices... Is there any other way in android to get battery capacity... Eg.if mobile device capacity is 2000mAh it should return me 2000

public Double getBatteryCapacity() {

        Object mPowerProfile_ = null;
        double batteryCapacity = 0;
        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) {

            // Class not found?
            e.printStackTrace();
        }

        try {

            // Invoke PowerProfile method "getAveragePower" with param
            // "battery.capacity"
            batteryCapacity = (Double) Class.forName(POWER_PROFILE_CLASS)
                    .getMethod("getAveragePower", java.lang.String.class)
                    .invoke(mPowerProfile_, "battery.capacity");

        } catch (Exception e) {

            // Something went wrong
            e.printStackTrace();
        }

        return batteryCapacity;
    }
like image 881
Jay Poojara Avatar asked Jan 17 '15 09:01

Jay Poojara


People also ask

How can I get total battery capacity in android programmatically?

BatteryManager. BATTERY_PROPERTY_CHARGE_COUNTER which gives you the remaining battery capacity in microampere-hours. BATTERY_PROPERTY_CAPACITY which gives you the remaining battery capacity as an integer percentage. would give you the Total Battery Capacity.

How can I know the battery capacity in Mah of my Android device?

You can check your Android phone's battery status by navigating to Settings > Battery > Battery Usage. However, if you're seeking in-depth analytics on your phone's battery health, we recommend the AccuBattery app. The more you use AccuBattery, the better it gets at analyzing your battery's performance.

How to check battery health in Android programmatically?

You can use intent. getIntExtra(BatteryManager. EXTRA_HEALTH,0) to get information about current battery voltage.


2 Answers

For those users interested in the implementation of the @Yehan suggestions, here is a method that return the total battery capacity: (only for API Level >= 21)

public long getBatteryCapacity(Context context) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        BatteryManager mBatteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);
        Integer chargeCounter = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
        Integer capacity = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

        if(chargeCounter == Integer.MIN_VALUE || capacity == Integer.MIN_VALUE)
            return 0;

        return (chargeCounter/capacity) *100;
    }
    return 0;
}

Unfortunately, for some reason this approach doesn't always work. In those cases, you can use Java's Reflection APIs to retreive the value returned by getBatteryCapacity method of com.android.internal.os.PowerProfile :

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;

}

Source: https://android.googlesource.com/platform/frameworks/base/+/a029ea1/core/java/com/android/internal/os/PowerProfile.java

like image 182
Domenico Avatar answered Sep 21 '22 18:09

Domenico


You can use following properties of android.os.BatteryManager. BATTERY_PROPERTY_CHARGE_COUNTER which gives you the remaining battery capacity in microampere-hours. BATTERY_PROPERTY_CAPACITY which gives you the remaining battery capacity as an integer percentage.

So,

BATTERY_PROPERTY_CHARGE_COUNTER / BATTERY_PROPERTY_CAPACITY * 100

would give you the Total Battery Capacity. This would not be the precise calculation but you will be able to close the actual capacity.

References: https://source.android.com/devices/tech/power/index.html#device-power http://developer.android.com/reference/android/os/BatteryManager.html

like image 24
Yehan Pemarathne Avatar answered Sep 21 '22 18:09

Yehan Pemarathne