Android - информация об использовании аккумулятора
Используя этот код, я могу найти уровень заряда аккумулятора телефона:
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float percent = (level / (float)scale) * 100;
Но как мне получить информацию об использовании аккумулятора приложений, установленных на телефоне, в том числе на экране, как показано на рисунке ниже?
![Снимок экрана экрана использования аккумулятора]()
Ответы
Ответ 1
Извините, что разочаровал вас, но API использования питания Android не являются общедоступными. поэтому нет официального способа получить то, что вы хотите.
Но вы можете использовать отражение для доступа к некоторым частным членам и методам и использовать их. Вы также можете проверить . Отсюда вы можете получить некоторые количественные значения для потребления отдельных приложений.
Вы можете использовать это значение для расчета процента для всех приложений.
Ответ 2
Батарея может быть сброшена с устройства следующим образом:
adb shell dumpsys batteryinfo
Ответ 3
Измерение энергопотребления для конкретного приложения или для определенной части аппаратного обеспечения телефона не так просто. Из общедоступного API разработчика Google это невозможно сделать простым способом. Существуют и другие способы, которые являются довольно сложными. Для каждого Android-смартфона Google требуется, чтобы производитель добавил к устройству так называемый профиль мощности на устройство. Они выглядят так:
<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>
Они расскажут вам, сколько из них потребляет каждое аппаратное состояние компонента (например, Wi-Fi имеет три состояния, у процессора 10 и т.д.). Теперь Android основан на Linux, и это позволяет проверить текущее состояние каждого аппаратного компонента. Например, файл
/sys/devices/virtual/leds/lcd-backlight/brightness
отображает текущее состояние вашего ЖК-дисплея (обратите внимание, что для этого нет требуется root-доступ). Для каждого аппаратного компонента такой путь существует. Если вы сейчас хотите точно измерить, сколько энергии потребляет приложение, вам нужно написать службу, которая контролирует, когда приложение активно или нет, и каковы текущие состояния оборудования. С помощью этой информации вы можете вычислить потребление энергии.
Также существует приложение, которое является открытым исходным кодом, оно называется PowerTutor (здесь находится Play-Store и ее вы найдете исходный код. Он делает именно то, что я просто Они также публикуют научную статью о том, насколько точны их подход (она хорошо работает).
Теперь возникает проблема. Несколько лет назад у меня была проблема измерения энергопотребления некоторых приложений. Клиент хотел, чтобы мы оценили их точное потребление энергии. В итоге мы выяснили, что профили мощности, на которых основан анализ, недостаточно точны. Похоже, что производители просто добавляют некоторые ценности в XML, которые даже не связаны с устройством. У нас было более 100 различных устройств от 20 разных брендов, только некоторые из них, похоже, имели значения в своем XML, которые были связаны с устройством.
Наконец, я могу сказать, не тратьте много времени на измерение реального потребления энергии на стороне программного обеспечения, это не стоит усилий. Используйте настоящий мультиметр и измерьте оборудование напрямую.
Ответ 4
Вместо того, чтобы использовать отражение для доступа к некоторым частным членам и методам, я бы рекомендовал вам программировать в среде исходного кода, что позволит вам использовать какой-либо частный API.
Если вы также хотите включить внутренние классы или методы, сделайте следующее:
- Перейдите в /platform/.
- Скопируйте, вставьте и замените загруженный скрытый файл API в этот каталог, например. андроид-23/android.jar.
- Измените compileSdkVersion и targetSdkVersion на 23 (например).
- Наконец, перестройте свой проект.
https://github.com/anggrayudi/android-hidden-api