Как узнать температуру процессора в Android

Тип датчика TYPE_TEMPERATURE устарел [начиная с Android 2.3], вероятно, который давал информацию о температуре процессора. Теперь у нас есть тип датчика TYPE_AMBIENT_TEMPERATURE, который будет предоставлять нам комнатную температуру (ни одно из моих использований, и, кстати, не все устройства и / версии Android поддерживают это)

Я проверил несколько приложений, которые измеряют температуру процессора. Вероятно, они читают системные файлы. Я попытался найти, на некоторых устройствах я могу найти его по следующему пути:

sys/devices/virtual/thermal/thermal_zone0/temp

Бит структуры варьируется от поставщика к поставщику, а также от единицы измерения. отлично! Но на многих устройствах я просто не могу найти такие файлы, и на этих устройствах эти приложения работают! Я удивляюсь, как!

Как мы можем измерить температуру процессора в Android?

2 ответа

Я использовал следующий путь:

sys/class/hwmon/hwmonX/temp1_input

это работает на большинстве телефонов

Устаревший не равно удален! Если вы обнаружите, что устройство все еще предлагает устаревший тип датчика, тогда продолжайте и продолжайте использовать его.

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

Добавляя новый (дополнительный) тип датчика, который явно соответствует температуре воздуха, можно лучше управлять этим ожиданием:

  • если вы хотите температуру воздуха, используйте новый датчик, если он доступен
  • если вам все равно, что вы измеряете (но в большинстве практических случаев это приведет к значительному влиянию температуры процессора), используйте устаревший датчик, если он доступен

"Если ваше приложение является системным приложением, интегрированным в ОС устройства, вы можете просто использовать HardwarePropertiesManager. Если нет, вот список путей к sysfs, которые вы можете прочитать, чтобы получить временные данные,

         /sys/devices/system/cpu/cpu0/cpufreq/cpu_temp
/sys/devices/system/cpu/cpu0/cpufreq/FakeShmoo_cpu_temp
/sys/class/thermal/thermal_zone0/temp
/sys/class/i2c-adapter/i2c-4/4-004c/temperature
/sys/devices/platform/tegra-i2c.3/i2c-4/4-004c/temperature
/sys/devices/platform/omap/omap_temp_sensor.0/temperature
/sys/devices/platform/tegra_tmon/temp1_input
/sys/kernel/debug/tegra_thermal/temp_tj
/sys/devices/platform/s5p-tmu/temperature
/sys/class/thermal/thermal_zone1/temp
/sys/class/hwmon/hwmon0/device/temp1_input
/sys/devices/virtual/thermal/thermal_zone1/temp
/sys/devices/virtual/thermal/thermal_zone0/temp
/sys/class/thermal/thermal_zone3/temp
/sys/class/thermal/thermal_zone4/temp
/sys/class/hwmon/hwmonX/temp1_input
/sys/devices/platform/s5p-tmu/curr_temp"")

Вы можете узнать больше о том, как читать системные файлы здесь ".

Образец Xamarin.Android здесь - это так же просто, как цикл по списку предопределенных путей к файлам (23 в моем случае) и чтение строки из первого файла, которая не завершается с ошибкой при открытии (а затем преобразование строки в число, масштабируя его до градусов).

Проверено на следующих устройствах:

  • Samsung Galaxy Note 10 (Snapdragon) API 29
  • Samsung Galaxy A5 2017 API уровня 24
  • Samsung Galaxy A9 2018, уровень API 26
  • Essential Phone API 26
  • Xiaomi MI 6 API 28
  • Xiaomi MI 8 Pro, уровень API 28
  • Huawei Mate 9, уровень API 24
  • Huawei Mate RS, уровень API 28
  • Nokia N1Â (Intel Atom) API 21
  • Huawei Honor Play, уровень API 27
  • Galaxy Note 3 Duos, уровень API 19
  • Xperia XZ2, уровень API 28
  • Motorola One XT1941-4, уровень API 28
  • Lenovo S5, API 26

Не работает:

  • Xiaomi Mi 8SE API 27 (обнаружена одна из температур ядра процессора в /sys/devices/virtual/ Thermal/ Thermal_zone9 / temp)
  • Xiaomi Mi 5s API 26
  • Устройства Galaxy S с процессорами Exynos
    • Samsung Galaxy S10 SM-G973F (Exynos), уровень API 28
    • Samsung Galaxy S9+ SM-G965F (Exynos) API 28
    • Samsung Galaxy S8+ SM-G955N (Exynos) API 26
  • Nokia 1 (Android GO), уровень API 27

Контекст

  1. Температура процессора недоступна через стандартный API датчиков.
  2. API HardwarePropertiesManager жизнеспособен только для Android Enterprise, а не для типичного варианта использования.
  3. Единственный способ узнать температуру процессора - это иметь исчерпывающий список "волшебных" путей с системными файлами, сообщающими показания температуры.

Такие программы, как CPU-Z, имеют внутренний список путей, по которым можно исследовать файлы, содержащие имя датчика / показания (обычно называемое "тип" или "имя") и фактическое значение (обычно называемое "temp"). Например, под/sys/devices/virtual/thermal/thermal_zone0 можно прочитать значение "cpu-0-0-user" из type файл и значение "32100" из temp файл.

На одном устройстве есть несколько файлов с разными именами датчиков. По названию датчика можно догадаться, относится он к процессору или нет (в названии содержится CPU, SoC или что-то еще). Точнее говоря, единого значения "температуры процессора" не существует, их много. Если вас не интересуют детали (например, разница между температурой ядра или корпуса), выбор одного значения должен отражать тепловую ситуацию процессора.

Кроме того, имена датчиков (а также пути к файлам) будут разными для разных производителей устройств. Значения датчиков могут быть в тысячах целых или нет. Разнообразие способов реализации временного чтения подсказывает, почему в Android нет стандартного API для измерения температуры процессора.

Список, который я собрал, не является полным (и кажется, что он меньше, чем тот, который находится внутри CPU-Z), хотя я потратил довольно много времени на поиск в Google.

Как найти правильные пути для конкретного устройства

  • Получите устройство
  • Установите Termux и сделайте cd, ls а также cat прохождение различными путями (начиная со списка в примере выше), изучение того, что находится внутри, и поиск интересующего датчика
Другие вопросы по тегам