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

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

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

sys/devices/virtual/thermal/thermal_zone0/temp

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

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


person jQueen    schedule 17.07.2014    source источник
comment
Я добился большего успеха с этим sys/devices/virtual/thermal/thermal_zone0/temp, чем с sys/class/hwmon/hwmonX/temp1_input Мануэля.   -  person ban-geoengineering    schedule 19.08.2017
comment
Это наиболее полный список путей определения температуры процессора на сегодняшний день: stackoverflow.com/a/59306562/7483211   -  person Cornelius Roemer    schedule 21.12.2019


Ответы (4)


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

sys/class/hwmon/hwmonX/temp1_input

который работает на большинстве телефонов

person Manuel Schmitzberger    schedule 24.02.2016
comment
Для Huawei Honor 4C нет: нет такого файла или каталога. - person t0m; 07.04.2017
comment
Это не сработало на Samsung Galaxy Core Prime, но OP sys/devices/virtual/thermal/thermal_zone0/temp сработало. :-) - person ban-geoengineering; 19.08.2017
comment
На большинстве телефонов, действительно заглянув в папку hwmon, вы найдете температуру процессора. Но как узнать, какой именно hwmonX является вашим процессором? - person Kamen Stoykov; 20.12.2017

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

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

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

  • если вам нужна температура воздуха, используйте новый датчик, если он есть
  • если вам все равно, что вы измеряете (но в большинстве практических случаев в конечном итоге будет что-то сильно зависеть от температуры процессора), используйте устаревший датчик, если он доступен
person zmarties    schedule 17.07.2014
comment
согласился с вашим ответом, что для получения температуры процессора я могу использовать устаревший датчик, если он доступен. Но большинство устройств не поддерживают его, и на тех же устройствах работает приложение для измерения температуры ЦП, которое показывает температуру ЦП, а не температуру окружающей среды [правильное поведение]; Как я уже упоминал в своем вопросе, я тоже нашел способ, но это не кажется полностью надежным. то есть отслеживание системных файлов, которые варьируются от поставщика к поставщику - person jQueen; 21.07.2014

Образец 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 devices with Exynos CPUs
    • Samsung Galaxy S10 SM-G973F (Exynos), API Level 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, имеют внутренний список путей, по которым можно исследовать файлы, содержащие имя датчика / показания (обычно называемое «тип» или «имя») и фактическое значение (обычно называемое «темп»). Например. под /sys/devices/virtual/thermal/thermal_zone0 можно прочитать значение «cpu-0-0-user» из файла type и значение «32100» из файла temp.

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

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

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

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

  • Получите устройство
  • Установите Termux и выполните cd, ls и cat, пройдя разными путями (начиная со списка в примере выше), исследуя, что находится внутри, и ищите интересующий датчик.
person Maxim Saplin    schedule 07.05.2020
comment
Есть ли способ заставить его работать на устройствах Samsung S-8-9-10 +? - person MasterMind; 13.06.2020
comment
Предполагая, что вы имеете в виду варианты Exynis (sincr the samplebabive подходит для Snapdragon) ... Получите устройство Установите Termux и выполните cd, ls и cat, пройдя различными путями (начиная со списка в приведенном выше примере), исследуя, что внутри, и ищите интересующий датчик - person Maxim Saplin; 14.06.2020

Если ваше приложение является системным, интегрированным в ОС устройства, вы можете просто использовать 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"")

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

person Yadhu Gopalan    schedule 21.10.2020