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