Android API 如何获取电量百分比?

How Android API get battery percentage?

我正在研究 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如何知道电池当前的充电状态并得出结果?我四处研究并知道一些电池测量方法,例如:

AndroidAPI是否使用了以上任何方法?或者其他方法?

我知道 OS 获取电池(和其他电量)信息的三种主要方式。

  • /proc - 这些文件直接绑定到各种 OS 和硬件表。当您访问这些文件时,实际上是在 OS 中查询这些表的值。不幸的是,它非常依赖于系统,因为它取决于内核实现。
  • PAPI (Performance APIs) - 这些旨在解决在获取性能信息方面缺乏标准化的问题。虽然有一个 Java 实现,但我没有发现任何东西告诉我有一个 android 实现。
  • ACPI Tables - 用于保存信息的标准化 OS 表格。我发现它们比我想要的更依赖于平台。

另一种访问此信息的方法是直接从硬件本身获取。您可以猜到,这非常依赖于平台。它因架构而异,甚至包括同一架构的不同版本。

另一个关于高级 APIs 的说明,例如 PAPI、ACPI 表和 /proc。即使信息存在,他们也可能会或可能不会查询硬件。这完全取决于内核和 API 开发人员如何实现。