0

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

Android API 是否使用上述任何方法?还是另一种方法?

4

1 回答 1

0

我知道操作系统获取电池(和其他电源)信息的三种主要方式。

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

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

关于高级 API 的另一项注意事项,例如 PAPI、ACPI 表和 /proc。即使信息在那里,他们也可能会或可能不会查询硬件。这一切都取决于内核和 API 开发人员是如何实现的。

于 2015-12-14T18:23:37.727 回答