使用此代码,我可以找到手机的电池电量:
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float percent = (level / (float)scale) * 100;
但是如何获取手机上安装的应用的电池使用情况,包括屏幕上的应用,如下图所示?
答案 0 :(得分:6)
很抱歉让您失望,但 Android的电源使用API不公开。所以没有正式的方式来获得你想要的东西。
但您可以使用反射来访问某些私有成员和方法并使用它们。您还可以查看this。从这里,您可以获得个人应用程序功耗的一些定量值。
您可以使用该值来计算所有应用的百分比。
答案 1 :(得分:2)
可以从设备中转储电池状态,如下所示:
adb shell dumpsys batteryinfo
答案 2 :(得分: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值与设备相关。
最后我可以说,不要花太多时间来测量软件方面的实际功耗,但这不值得付出努力。使用真正的万用表并直接测量硬件。
答案 3 :(得分:0)
我建议您在源代码环境中编程,而不是使用反射来访问某些私有成员和方法,这样您就可以使用任何私有API。
如果您还想包含内部类或方法,请执行以下操作: