Как узнать, сколько аккумуляторов использует мое приложение для Android на пользовательских устройствах?

Я пишу приложение, чтобы оценить возможность использования сети Bluetooth P2P на Android.

Я заметил, что на Galaxy Nexus он использует очень мало батареи, а на Nexus S он очень быстро разряжает батарею. Это напрямую связано с высокой загрузкой процессора из-за Bluetooth.

Теперь я хотел бы получить информацию о том, сколько аккумуляторов разряжает мое приложение на устройствах, на которых оно установлено. Простое время регистрации и уровень заряда батареи бесполезны, так как я не знаю, когда устройство используется, и даже если бы я его зарегистрировал, я бы не знал, будет ли пользователь играть в 3D-игры, торренты через Wi-Fi или чтение электронной книги на затемненный экран.

Чтобы ухудшить ситуацию, не все батареи, вызванные моим приложением, приписываются ему на экране аккумулятора - некоторые из них перечислены как "Bluetooth", например (опять же, зависящие от устройства).

Есть ли какой-либо простой способ сохранения конфиденциальности для получения полезной информации о ненагруженных устройствах? Устройства не находятся под моим контролем. Я не могу просто заглянуть в меню, я не могу использовать ADB.

Ответы

Ответ 1

В настоящее время API Android не поддерживается. Единственная доступная документация - это описание того, как использовать BatteryManager трансляции, которые обеспечивают общий уровень заряда батареи и отсутствие данных для каждого приложения.

Я полагаю, что даже если есть недокументированные способы подражать тому, что показывает диспетчер батареи системных настроек, для них потребуется rooting.

Ответ 2

AFAIK нет способа сделать это. Самое близкое, что вы можете сделать, это подключить устройство к инструменту мониторинга, например, маленькие глазные лаборатории, которые набирают батарею, потребляемую вашим приложением со временем на графике. Он также поддерживает маркировку ключевых событий в жизни приложения, например, включение WIFI/bluetooth и т.д.

Нет поддержки для этого удаленно, но вы можете получить данные на своих собственных тестовых устройствах.

Ответ 3

Этот подход довольно груб, но это может помочь. Вы можете использовать существующие передачи BatteryManager для отслеживания изменений общего уровня заряда аккумулятора , пока ваше приложение активно.

Знание того, когда ваше приложение активно, является отдельной проблемой. Если ваше приложение полностью состоит из "Деятельности", вы можете получить хорошие результаты, начав отслеживать каждый раз, когда вы вызываете какой-либо из ваших методов "<203" и останавливаете отслеживание в onPause(). Если вы можете получить все ваши действия из одного базового класса активности, то это довольно просто. См. Как определить, когда приложение Android перейдет на задний план и вернется на передний план, чтобы узнать, как отслеживать это.

Если ваше приложение более сложное, а умный материал происходит в более длительном компоненте, таком как Сервис, то это намного сложнее.

Это грубо, но, по крайней мере, это поможет вам отличить "игра в 3D-игры" от "использования моего приложения".