Android – 电池使用情况详情

使用这段代码,我可以find电话的电池电量:

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float percent = (level / (float)scale) * 100; 

但是,如何获取手机上安装的应用程序(包括屏幕)的电池使用情况详情,如下图所示?

电池使用情况详情屏幕截图

Solutions Collecting From Web of "Android – 电池使用情况详情"

对不起,让你失望,但Android的用电API是不公开的 。 所以没有官方的办法来得到你想要的。

但是你可以使用reflection来访问一些私人成员和方法 ,并利用它们。 你也可以看看这个 。 从这里你可以得到一些个别应用功耗的定量值。

您可以使用该值来计算所有应用的百分比。

电池状态可以像这样从设备中转储出来:

 adb shell dumpsys batteryinfo 

测量特定应用程序或特定部分电话硬件的功耗并不是那么容易。 从公开的Google Developer API中,不可能通过简单的方式来完成。 还有其他一些安静复杂的方式。 对于每个Android智能手机,Google都要求制造商为设备添加所谓的电源configuration文件 XML。 他们看起来像这样

  <item name="screen.on">0.1</item> <!-- ~200mA --> <item name="screen.full">0.1</item> <!-- ~300mA --> <item name="bluetooth.active">0.1</item> <!-- Bluetooth data transfer, ~10mA --> <item name="bluetooth.on">0.1</item> <!-- Bluetooth on & connectable, but not connected, ~0.1mA --> <item name="wifi.on">0.1</item> <!-- ~3mA --> <item name="wifi.active">0.1</item> <!-- WIFI data transfer, ~200mA --> <item name="wifi.scan">0.1</item> 

他们告诉你当前组件的每个硬件状态消耗多less(例如Wifi有三个状态,CPU有10个等)。 现在Android是基于Linux的,这使您可以检查每个硬件组件的当前状态。 例如文件

 /sys/devices/virtual/leds/lcd-backlight/brightness 

为您提供LCD的当前状态(请注意,为此, 不需要 root权限)。 对于每个硬件组件都存在这样的path。 如果您现在想精确测量一个应用消耗多less能量,那么您需要编写一个服务来监视应用何时处于活动状态以及当前的硬件状态。 有了这些信息,你就可以计算能耗。

还有一个应用程序是开源的,叫做PowerTutor (这里是Play-Store的链接 ,你可以find它的源代码 ,它就是我刚才解释的),还发布了一个关于它们的准确性的科学论文方法是(它做得很好)。

现在出现这个问题。 几年前我遇到了测量一些应用程序功耗的问题。 一位客户希望我们评估他们确切的功耗。 最后,我们发现分析所依据的能力概况是不够准确的。 似乎制造商只是在XML中添加一些甚至与设备无关的值。 我们拥有来自20个不同品牌的超过100种不同的设备,其中只有less数设备似乎具有与设备相关的XML值。

最后我可以说,不要花太多的时间来测量软件方面的实际功耗,这是不值得的。 使用真正的万用表并直接测量硬件。

而不是使用reflection访问一些私人成员和方法,我会build议你在源代码环境,允许您使用任何私人API编程。

如果您还想要包含内部类或方法,请执行以下操作:

  1. 去/平台/。
  2. 复制,粘贴并replace下载的隐藏的API文件到这个目录,例如android-23 / android.jar。
  3. 将compileSdkVersion和targetSdkVersion更改为23(例如)。
  4. 最后,重build你的项目。

https://github.com/anggrayudi/android-hidden-api