0

这段代码在每台设备上都给了我 2000,而之前关于这个问题的所有问题都给出了不相关的答案。

请有人帮忙

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(getContext());
    } 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(getActivity(), batteryCapacity + " mah",
                Toast.LENGTH_LONG).show();
        Log.d("Capacity",batteryCapacity+" mAh");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但我想要像 CPU-Z 应用程序提供的最大容量:

在此处输入图像描述

4

1 回答 1

0

从随附的文档以及PowerProfile类的源代码中,该方法getAveragePower() 返回:

以毫安为单位的平均电流。

相反,您必须使用getBatteryCapacity()which 返回

电池容量 mAh

因此,您必须将方法调用更改为getBatteryCapacity()getAveragePower()带参数,这与带两个参数不同,因此代码将如下所示:

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("getBatteryCapacity")
                .invoke(mPowerProfile_);
        Toast.makeText(MainActivity.this, batteryCapacity + " mah",
                Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
    } 
}
于 2016-09-06T10:32:45.283 回答