如何获取已安装应用的电池使用情况?

问题描述 投票:16回答:4

使用此代码,我可以找到手机的电池电量:

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

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

Screenshot of battery usage details screen

android battery usage-statistics installed-applications
4个回答
6
投票

很抱歉让您失望,但Android的电源使用API​​不公开。所以没有正式的方法可以得到你想要的东西。

但是您可以使用反射来访问某些私有成员和方法并使用它们。您还可以查看this。从这里,您可以获得个人应用功耗的一些定量值。

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


2
投票

可以从设备中转储电池状态,如下所示:

adb shell dumpsys batteryinfo

2
投票

测量特定应用或手机硬件特定部分的功耗并非易事。从公共Google Developer API开始,无法轻松完成此操作。还有其他方法安静复杂。对于每个Android智能手机,Google都要求制造商向设备添加所谓的power profile 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> 

它们告诉您组件的每个硬件状态消耗多少电流(例如,Wifi有三种状态,CPU有10种状态等)。现在Android基于Linux,这允许您检查每个硬件组件的当前状态。例如文件

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

为您提供LCD的当前状态(请注意,此时无需root访问权限)。对于每个硬件组件,存在这样的路径。如果您现在想要精确测量应用程序消耗的能量,您需要编写一个服务,该服务会在应用程序处于活动状态时监视,以及当前的硬件状态。有了这些信息,您就可以计算出能耗。

还有一个应用程序是开源的,它被称为PowerTutor(这里是Play-Store link和她你会找到source code。它完全正如我刚才解释的那样。他们还发布了一个科学的paper,他们的方法是多么准确(它干得好。

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

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


0
投票

我建议您在源代码环境中编程,而不是使用反射来访问某些私有成员和方法,这允许您使用任何私有API。

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

  1. 转到/ platforms /。
  2. 将下载的隐藏API文件复制,粘贴并替换到此目录中,例如Android的23 /的android.jar。
  3. 将compileSdkVersion和targetSdkVersion更改为23(例如)。
  4. 最后,重建您的项目。

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

© www.soinside.com 2019 - 2024. All rights reserved.