如何了解我的 Android 应用在用户设备上消耗了多少电量?

Posted

技术标签:

【中文标题】如何了解我的 Android 应用在用户设备上消耗了多少电量?【英文标题】:How can I find out how much battery my Android app consumes on user's devices? 【发布时间】:2013-04-09 11:00:16 【问题描述】:

我正在编写一个应用程序来评估蓝牙 P2P 网络在 android 上的可行性。

我注意到,在 Galaxy Nexus 上,它使用的电池很少,而在 Nexus S 上,它会很快耗尽电池。这直接是由蓝牙导致的高 CPU 负载造成的。

现在,我想收集有关我的应用在安装它的设备上消耗多少电量的信息。简单地记录时间与电池电量是没有用的,因为我不知道设备何时在使用,即使我记录了,我也不知道用户是否在通过 WiFi 下载种子或阅读电子书时玩 3D 游戏屏幕变暗。

更糟糕的是,并非我的应用程序导致的所有电池使用都归因于电池屏幕中的它 - 例如,有些被列为“蓝牙”(同样,取决于设备)。

是否有任何简单、保护隐私的方法可以在非 root 设备上获取有用信息?这些设备不受我的控制。我不能简单地看菜单,我不能使用 ADB。

【问题讨论】:

您是否需要远程获取此设备信息?当您说logging time vs. battery level 时,您是在谈论整个手机的电池电量还是您的应用消耗的电池电量? @DeepakBala:是的,信息需要上传到数据收集服务器。记录我的应用程序消耗的电池是我想做的,但我不知道有任何 API 可以让我这样做。记录手机的电池电量很容易,但(正如我指出的)没用。 【参考方案1】:

Android API 目前不支持此功能。唯一的available documentation 描述了如何使用BatteryManager 的广播,它只提供整体电池电量,而不提供每个应用程序的详细信息。

我想即使有未记录的方法来模拟系统设置电池管理器显示的内容,它们也需要生根。

【讨论】:

【参考方案2】:

AFAIK 没有办法做到这一点。您可以做到这一点的最接近方法是将设备连接到little eye labs 之类的监控工具,该工具会在图表上绘制您的应用随时间消耗的电池电量。它还支持标记应用程序生命周期中的关键事件,例如打开 WIFI/蓝牙等。

不支持远程执行此操作,但您可以在自己的测试设备上获取数据。

【讨论】:

fb 收购后不接受更多注册。你知道其他类似的工具吗?你用过小眼科实验室吗? 我确实在很久以前编写的应用程序中使用了小眼实验室。从那以后,我再也没有发现需要类似的东西。 android lollipop 版本拥有new tool to detect battery usage。不过我还没有机会使用它。 酷。谢谢!我有一个使用大量传感器的应用程序,所以我一直在寻找一种方法来找出实际值的电池使用分布,而不仅仅是百分比。我会试试电池历史学家。干杯!【参考方案3】:

这种方法相当粗略,但可能会有所帮助。您可以使用现有的 BatteryManager 广播来跟踪整体电池电量的变化当您的应用处于活动状态时

了解您的应用何时处于活动状态是一个单独的问题。如果您的应用程序完全由活动组成,那么您可以通过在任何活动的onResume() 方法被调用时开始跟踪并在onPause() 中停止跟踪来获得良好的结果。如果您可以让您的所有活动都派生自单个基本活动类,那么这很容易。有关如何跟踪此问题的建议,请参阅 How to detect when an Android app goes to the background and come back to the foreground。

如果您的应用程序更复杂,并且智能的东西发生在像服务这样运行时间更长的组件中,那就更难了。

这很粗略,但至少它可以帮助您区分“玩 3D 游戏”和“使用我的应用程序”。

【讨论】:

不幸的是,整个应用或多或少都是后台服务。 因此以活动建议的方式为您提供主要后台服务。你一定知道你有蓝牙主动吗?至于收集数据,您可能需要查看其中一个分析包。我使用 Flurry 和我自己的事件作为后端有类似的东西。 @Ifor:检测后台服务无法帮助我区分“因为我使用蓝牙而耗电”和“因为用户在前台玩 3D 游戏而我使用蓝牙而耗电”。跨度>

以上是关于如何了解我的 Android 应用在用户设备上消耗了多少电量?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何减慢电池消耗

跨多个安卓设备同步应用数据

Android卡顿优化:卡顿分析方法

如何找出android设备中每个应用程序的电池消耗[重复]

Android - 如何从多个设备检测同一用户?

Android:使用电池历史学家诊断应用程序过度电池消耗的来源