2

我正在使用最新的 Google 手机(Nexus 6 / Android 5.1.1),并尝试使用新的BatteryManagerAPI:

getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER)

但它返回Long.MIN_VALUE,这意味着设备不支持此属性。
这没有任何意义,因为从官方文档来看,设备应该支持这个属性。

我使用下面的代码来测试这个属性。我错过了什么吗?

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BatteryManager bm = (BatteryManager)this.getSystemService(Context.BATTERY_SERVICE);
        long energyCounter = bm.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);
    }
}
4

1 回答 1

0

您可以在 adb shell中检查/sys/class/power_supply路径。

您应该能够看到与电池信息相关的文件夹。文件夹名称因设备而异。进入相关文件夹。

就我而言,它是/sys/class/power_supply/battery。(银河_S4)

使用cat ueventcat related_file。然后您应该能够查看电池驱动程序是否告知您要查找的信息。

笔记:

Android 只负责从电池驱动程序提供的文件中读取支持的值。在电池驱动程序源代码中执行以微安为单位的剩余电池计算。如果驱动程序不向您提供信息,Android 将无法获取信息。

例如;

shell@ja3g:/ $ cd /sys/class/power_supply/battery
shell@ja3g:/sys/class/power_supply/battery $ cat uevent
POWER_SUPPLY_NAME=battery
POWER_SUPPLY_STATUS=Charging
POWER_SUPPLY_CHARGE_TYPE=Fast
POWER_SUPPLY_HEALTH=Good
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_ONLINE=4
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_VOLTAGE_NOW=4211000
POWER_SUPPLY_VOLTAGE_AVG=4211000
POWER_SUPPLY_CURRENT_NOW=360
POWER_SUPPLY_CURRENT_AVG=360
POWER_SUPPLY_CHARGE_NOW=1
POWER_SUPPLY_CAPACITY=87
POWER_SUPPLY_TEMP=315
POWER_SUPPLY_TEMP_AMBIENT=-250

shell@ja3g:/sys/class/power_supply/battery $ cat capacity
87

POWER_SUPPLY_CAPACITY=87 表示电池驱动器计算剩余电量百分比为 87 并写入此文件夹中的容量文件。Android 从这个文件中读取并显示电池百分比为 87。这都是关于驱动程序的。


可选地,

BatteryManager.BATTERY_PROPERTY_CURRENT_NOW有一个从设备中的 current_now 文件中读取的应用程序。文件位置因设备而异。

我正在使用 Vestel Liva Android 5.1 手机,就我而言 current_now 文件路径是:

/sys/devices/soc.0/qpnp-vm-bms-ffffffc073455400/power_supply/bms/current_now

这是项目源代码的链接:CurrentWidget

也许您可以在您的设备中找到与BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER

希望这可以帮助,

干杯

于 2015-07-29T14:45:12.197 回答