我正在编写一个应用来评估Android上蓝牙P2P网络的可行性。
我注意到在Galaxy Nexus上,它使用非常少的电池,而在Nexus S上,它可以非常快速地耗尽电池。这是由于蓝牙导致的高CPU负载直接导致的。
现在,我想收集有关我的应用在其安装的设备上导致电量耗尽的信息。简单地记录时间与电池电量是没有用的,因为我不知道设备何时在使用,即使我记录了这一点,我也不知道用户是通过WiFi或阅读电子书来玩3D游戏在昏暗的屏幕上。
为了使问题更严重,并非我的应用程序引起的所有电池使用都归因于电池屏幕 - 有些被列为&#34;蓝牙&#34;,例如(再次,取决于设备)。< / p>
是否有任何简单,隐私保护的方式可以在非root设备上获取有用的信息?这些设备不受我的控制。我不能简单地在菜单中查看,我不能使用ADB。
答案 0 :(得分:1)
Android API目前不支持此功能。唯一的available documentation是描述如何使用BatteryManager广播的广播,它只提供整体电池电量而不是每个应用程序的详细信息。
我认为即使有未记录的方法来模拟系统设置电池管理器显示的内容,也需要生根。
答案 1 :(得分:1)
AFAIK没有办法做到这一点。您最接近这样做的方法是将设备连接到little eye labs等监控工具,该工具会在图表上随时间抽取您的应用消耗的电量。它还支持在应用程序的生命周期中标记关键事件,如打开WIFI /蓝牙等。
不支持远程执行此操作,但您可以在自己的测试设备上获取数据。
答案 2 :(得分:1)
这种做法非常粗糙,但可能有所帮助。您可以使用现有的BatteryManager广播来跟踪应用程序处于活动状态时对整体电池电量的更改。
了解您的应用何时处于有效状态是一个单独的问题。如果您的应用完全由“活动”组成,则可以通过在调用任何活动的onResume()
方法时开始跟踪并在onPause()
中停止跟踪来获得良好的结果。如果您可以从单个基本Activity类派生所有活动,那么这很容易。有关如何跟踪此问题的建议,请参阅How to detect when an Android app goes to the background and come back to the foreground。
如果您的应用程序更复杂,并且智能内容发生在服务等较长时间运行的组件中,那么它就会变得更加困难。
这很粗糙,但至少它可以帮助你区分“玩3D游戏”和“使用我的应用程序”。