如何在Android中获得CPU温度

时间:2014-07-17 07:55:27

标签: android cpu temperature

传感器类型TYPE_TEMPERATURE已被弃用[自Android 2.3起]可能提供了有关CPU温度的信息。 现在我们有传感器类型TYPE_AMBIENT_TEMPERATURE,它将为我们提供室温(我没有使用,而且不是所有设备和/或Android版本都支持它)

我查了几个测量CPU温度的应用程序。可能他们正在阅读系统文件。我尝试定位,在某些设备中,我能够在以下路径中找到它:

sys/devices/virtual/thermal/thermal_zone0/temp

结构位因供应商而异。也是计量单位。精细! 但在许多设备中,我根本无法找到任何此类文件。在相同的设备中,这些应用程我想知道,怎么样!

我们如何测量Android中的CPU温度?

4 个答案:

答案 0 :(得分:5)

我使用了以下路径:

sys/class/hwmon/hwmonX/temp1_input

适用于大多数手机

答案 1 :(得分:2)

弃用不等于删除!如果您发现设备仍然提供不推荐使用的传感器类型,请继续使用它。

弃用旧传感器名称的部分原因是,在看到温度传感器时,公众期望温度是环境空气的温度。然而,在许多情况下,传感器是CPU的一部分,因此它最终主要反映了CPU的温度。

通过添加明确表示气温的新(可选)传感器类型,可以更好地管理这种期望:

  • 如果您需要空气温度,请使用新传感器(如果有)
  • 如果您不关心测量的是什么(但在大多数实际情况下最终会受到CPU温度影响很大的事情),请使用已弃用的传感器(如果有)

答案 2 :(得分:0)

Xamarin.Android sample is here-这就像循环遍历预定义的文件路径列表(在我的情况下为23)并从第一个文件中读取一行(打开时不会失败)(然后将字符串转换为数字,将其缩放到度)。

在以下设备上进行了验证:

  • 三星Galaxy Note 10(Snapdragon)API 29
  • 三星Galaxy A5 2017 API级别24
  • 三星Galaxy A9 2018,API级别26
  • 基本电话API 26
  • 小米MI 6 API 28
  • Xiaomi MI 8 Pro,API级别28
  • 华为伴侣9,API级别24
  • 华为Mate RS,API级别28
  • 诺基亚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

不起作用:

  • 小米Mi 8SE API 27(在/ sys / devices / virtual / thermal / thermal / thermal_zone9 / temp中找到CPU内核的临时温度之一)
  • 小米Mi 5s API 26
  • 具有Exynos CPU的Galaxy S设备
    • 三星Galaxy S10 SM-G973F(Exynos),API级别28
    • 三星Galaxy S9 + SM-G965F(Exynos)API 28
    • 三星Galaxy S8 + SM-G955N(Exynos)API 26
  • 诺基亚1(Android GO),API级别27

上下文

  1. 没有通过标准Sensor API提供的CPU温度
  2. HardwarePropertiesManager API仅适用于Android Enterprise,不适用于典型用例
  3. 获取CPU温度的唯一方法是拥有完整的“魔术”路径列表,并带有报告温度读数的系统文件

诸如CPU-Z之类的程序具有内部路径列表,可以为包含传感器/读数名称(通常称为“类型”或“名称”)和实际值(通常称为“ temp”)的文件进行探测。 。例如。在/sys/devices/virtual/thermal/thermal_zone0下的用户可能会从type文件中读取“ cpu-0-0-user”值,而从temp文件中读取“ 32100”值。

单个设备上有多个文件,它们具有不同的传感器名称。一个人可能会根据传感器的名称猜测它是否与CPU相关(名称中包含CPU或SoC或其他名称)。准确地说,没有“ CPU温度”值这样的东西,有很多。如果您不关心具体细节(例如,告诉内核或封装温度之间的差异),则选择一个值应代表CPU的散热情况。

各个设备供应商的传感器名称(以及文件路径)也将有所不同。传感器值可以是数千,也可以不是整数。可以采用多种方式来实现临时读取,这提示了为什么Android中没有用于CPU临时的标准API。

尽管我确实花了很多时间进行谷歌搜索,但我收集的列表并不完整(似乎比CPU-Z内部的列表小)。

如何找到特定设备的正确路径

  • 获取设备
  • 安装Termux并执行cdlscat的各种路径(从上述示例中的列表开始),调查内部内容并搜索感兴趣的传感器

答案 3 :(得分:0)

”“如果您的应用是集成在device OS中的系统应用,则可以只使用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"")

您可以了解有关如何读取系统文件here的更多信息。”