我正在研究Android中的能源。当我需要通过Android系统的百分比来了解当前的充电状态时,我运行以下功能:
public float getBatteryLevel() {
Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
return ((float)level / (float)scale) * 100.0f;
}
但我不知道Android API是如何知道电池的当前充电状态并得出结果的?我四处研究,知道一些电池测量方法,例如:
电压和充电状态之间的关系:http://www.powerstream.com/lithium-ion-charge-voltage.htm
库仑计数
安卓API是否使用上述任何方法?还是其他方法?
我知道操作系统获取电池(和其他电源)信息的三种主要方式。
- /proc-这些文件直接绑定到各种操作系统和硬件表。当您访问这些文件时,实际上是在向操作系统查询这些表的值。不幸的是,它非常依赖于系统,因为它依赖于内核实现
- PAPI(性能API)-这些旨在解决获取性能信息缺乏标准化的问题。虽然有一个Java实现,但我没有发现任何东西告诉我有一个android实现
- ACPI表格-用于保存信息的标准操作系统表格。我发现他们比我想要的更依赖平台
访问该信息的另一种方式是直接从硬件本身访问。正如你所猜测的,这是非常依赖于平台的。它因体系结构而异,甚至包括同一体系结构的不同版本。
关于高级API的另一个注意事项,如PAPI、ACPI表和/proc。即使存在信息,它们也可以查询硬件,也可以不查询硬件。这完全取决于内核和API开发人员是如何实现的。