如何获取已安装应用程序的电池使用详细信息? [复制]

2024-04-15

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

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

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


测量特定应用程序或手机硬件特定部分的功耗并不那么容易。从公共 Google Developer API 中不可能以简单的方式做到这一点。还有其他一些非常复杂的方法。对于每部 Android 智能手机,谷歌都要求制造商添加一个所谓的电源配置文件 https://source.android.com/devices/tech/power/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 有 3 个状态,CPU 有 10 个状态等)。现在 Android 是基于 Linux 的,这允许您检查每个硬件组件的当前状态。例如文件

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

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

还有一个开源的应用程序,它被称为强力导师 http://ziyang.eecs.umich.edu/projects/powertutor/(这里是Play 商店链接 https://play.google.com/store/apps/details?id=edu.umich.PowerTutor和她你会发现源代码 https://github.com/msg555/PowerTutor。它的作用正是我刚才解释的。他们还发表了科学paper http://robertdick.org/publications/zhang10oct.pdf他们的方法有多准确(效果很好)。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取已安装应用程序的电池使用详细信息? [复制] 的相关文章

随机推荐

  • 计算numpy中2个点列表的距离

    我有 2 个点列表作为 numpy ndarray 每一行都是一个点的坐标 例如 a np array 1 0 0 0 1 0 0 0 1 b np array 1 1 0 0 1 1 1 0 1 这里我想计算2个列表中所有点对之间的欧氏距
  • Windows Server 2012 R2 上通过 SSL 的 AD LDS

    我正在尝试将我的 AD LDS 实例配置为通过 SSL 运行 以便我可以使用我的应用程序从另一台计算机连接到它并执行密码更改操作 我安装了证书颁发机构来创建一个服务器证书 我可以在我的 AD LDS 实例上使用该证书 我将证书添加到 AD
  • Quill:如何防止工具栏滚动并设置高度?

    我正在尝试遵循以下示例https quilljs com playground autogrow height https quilljs com playground autogrow height但在设置编辑器框的高度并防止工具栏滚动到
  • 在 Ubuntu 9.10 中安装 play-framework

    我已从 playframework org 网站复制了压缩文件并将其解压缩到某个位置 我已将其插入到我的 bashrc 配置文件中以设置为 PATH 环境 但仍然无法从任何地方访问播放命令 即使在框架的安装目录中 播放文件也没有按原样运行
  • 将 Selenium WebDriver 连接到现有浏览器会话

    我正在使用 selenium 如果当前存在现有浏览器会话 对于我来说 Chrome 我想附加一个 webdriver 实例 我不想打开新的浏览器窗口 会话 我用谷歌搜索发现 有一些方法可以通过这些网站上的描述来做到这一点 通过扩展 Remo
  • file.canWrite() 说“true”,但我无法在可移动存储上写入(kit kat)

    我收到来自相机的意图 其中包含在此路径中拍摄的照片 storage extSdCard DCIM Camera photoCaptured jpg 我想调整图像的大小 已经这样做了 并在同一路径中覆盖 我可以在 2 3 4 1 和 4 3
  • 如何使用定时器和不同的线程让代码顺利运行

    我试图阻止 GUIfreezing 因为定时器间隔很短并且需要处理的内容太多Timer Tick事件处理程序 我已经用谷歌搜索了一段时间 我了解到我无法从 UI 线程以外的任何其他线程更新 UI 那么 如果您在下面使用大量控件怎么办 Tim
  • 使用 R 查找包含最大值的行索引

    给定以下矩阵 假设我想找到第二列中的最大值 mat lt matrix c 1 3 7 9 4 6 byrow T nc 3 mat 1 2 3 1 1 2 3 2 7 8 9 3 4 5 6 I know max mat 2 将返回 8
  • C# 中的数字签名无法在 C++ 中进行验证

    我有一个 C 应用程序 它使用 RSA 对数据进行数字签名 代码如下 RSACryptoServiceProvider rsa new RSACryptoServiceProvider rsa ImportCspBlob privateKe
  • MonoGame 和 Microsoft.XNA.Framework 命名空间之间的引用不明确

    MonoGame 一个基本上将 XNA 引入 Windows Phone 8 的框架 的所有命名空间都带有前缀Microsoft Xna Framework我相信将 XNA 应用程序移植到 MonoGame 时所需的代码更改量最小化 我的问
  • 如何使用 docker run 命令将 json 文件作为参数传递

    以下是我的 Dockerfile 内容 FROM python 2 7 slim Set the working directory to app WORKDIR app Copy the current directory content
  • 取消 RestSharp 请求

    我正在制作一个 wp7 应用程序 它使用 RestSharp 下载一些数据 我注意到应用程序指南要求我提供一个允许用户取消数据传输的 ui 元素 是否可以在休息时取消 ExecuteAsync 请求 ExecuteAsync 返回一个Res
  • 使用 # 重定向到页面中的 div

    我想在控制器中处理一些数据后重定向到网页的某个 div 他们有什么方法可以将 添加到网址末尾吗 或者我应该用javascript处理它 Example HttpPost public async Task
  • 查找线段是否位于另一线段的距离范围内

    我有一堆段 我拥有的数据是构成段 x1 y1 和 x2 y2 的 2 个点 并且想根据它们的位置对它们进行分类 如果一个片段与另一个片段足够接近 那么我想将它们放在一起 如果我必须用一句话来描述它 我想找到距线段任何点 5px 距离的所有相
  • OWL ObjectProperty 在 Protégé 中作为注释加载

    我正在尝试加载ontology http www bbc co uk ontologies wildlife 2010 11 04 shtml在 Prot g 中 但未按预期进行处理 最有问题的是所有对象和数据属性都显示为注释而不是数据属性
  • 使用 FileProvider 共享内部存储中的图像

    我的应用程序的内部存储中存储了一些文件 我想在外部应用程序中打开它们 例如 将图像发送到图库以供查看 我已经设置了一个FileProvider这样做 From AndroidManifest xml
  • 在多台机器上开发时无法运行 VSPackage

    我们正在团队中使用 Visual Studio 2012 和 TFS 开发 VSPackage The extension works fine on the computer used to create it through a wiz
  • 生成仅包含正数的高斯分布

    有没有办法随机生成一组正数 使其具有所需的平均值和标准差 我有一个算法来生成具有高斯分布的数字 但我不知道如何以保留平均值和标准差的方式处理负数 看起来泊松分布可能是一个很好的近似值 但它只需要一个平均值 编辑 回复中有一些混乱 所以我会尽
  • SSE加载和添加

    假设我有两个由两个类型数组表示的向量double 每个尺寸为2 我想添加相应的位置 所以假设向量i0 and i1 我想补充一下i0 0 i1 0 and i0 1 i1 1 一起 由于类型是double 我需要两个寄存器 诀窍是把i0 0
  • 如何获取已安装应用程序的电池使用详细信息? [复制]

    这个问题在这里已经有答案了 使用此代码 我可以找到手机的电池电量 int level battery getIntExtra BatteryManager EXTRA LEVEL 1 int scale battery getIntExtr