如何获取已安装应用程序的电池使用详情?

17

使用这段代码,我可以查找手机的电池电量:

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

我如何获取手机上已安装应用程序的电池使用情况详情,包括屏幕的使用情况,就像下面图片中显示的那样?

电池使用情况详情截图


需要获取每个应用程序的电池使用情况细节。 - Edgar prabhu
1
请查看此链接:https://dev59.com/kG865IYBdhLWcg3whfBf - Vivek Mishra
@VivekMishra 我需要以编程方式获取,而不是通过adb命令。 - Edgar prabhu
1
请查看该链接中克里斯的答案。 - Vivek Mishra
@Edgarprabhu - 我查看了链接,它确实有你要找的内容。 - Kristy Welsh
显示剩余2条评论
3个回答

3
测量特定应用程序或手机硬件的功耗并不容易。从公共的Google开发者API来看,这并不容易。还有其他比较复杂的方法。对于每个安卓智能手机,谷歌要求制造商向设备添加所谓的功率配置文件 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链接,这里是源代码)。它正是我刚才所解释的。他们还发表了一篇科学论文,介绍了他们的方法有多准确(做得很好)。
现在出现了问题。几年前,我遇到了一些应用程序的功耗测量问题。一个客户要求我们评估他们的精确功耗消耗量。最终,我们发现基于该分析的电力配置文件并不够精确。似乎制造商只是在XML中放置了一些与设备无关的值。我们有超过100种来自20个不同品牌的不同设备,只有少数几个设备的XML中的值与设备相关。

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


1

如果API >= 19,可以像这样从设备中转储电池统计信息:

adb shell dumpsys batterystats

对于 API < 19,请使用:

adb shell dumpsys batteryinfo

似乎现在已经更改为adb shell dumpsys batterystats - CamHart

0

不建议使用反射来访问一些私有成员和方法,我建议您在源代码环境中编程,这样可以使用任何私有API。

如果您还想包括内部类或方法,请按照以下步骤操作:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接