18

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

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

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

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

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

4

3 回答 3

1

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

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

于 2013-04-09T11:08:34.353 回答
1

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

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

于 2013-04-09T11:25:49.227 回答
1

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

Knowing when your app is active is a separate issue. If your app consists entirely of Activities, then you can get good results by starting to track whenever any of your Activities' onResume() methods is called, and stopping tracking in onPause(). If you can have all your Activities derive from a single base Activity class, then this is quite easy. See How to detect when an Android app goes to the background and come back to the foreground for suggestions on how to track this.

If your app is more complex, and the smart stuff happens in a longer-running component like a Service, then it's much harder.

This is crude, but at least it would help you distinguish "playing 3D games" from "using my app".

于 2013-04-09T11:29:00.683 回答