I know it's somehow possible to get the CPU's temperature because I downloaded an app that does it in an unrooted device. How is it done?
edit: The application is called A1 CPU Tool. I spent several days searching for an answer.
edit2: Here's the code I tried
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor TempSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
mSensorManager.registerListener(temperatureSensor, TempSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
private SensorEventListener temperatureSensor = new SensorEventListener(){
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float temp = event.values[0];
Log.i("sensor", "sensor temp = " + temp);
}
};
Read the file from following paths (Since it is different for different devices) to get cpu temperature details from different devices, One of the path will return the needed file.
"/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp"
"/sys/devices/system/cpu/cpu0/cpufreq/FakeShmoo_cpu_temp"
"/sys/class/thermal/thermal_zone1/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_zone0/temp"
"/sys/devices/virtual/thermal/thermal_zone0/temp"
"/sys/class/hwmon/hwmon0/device/temp1_input"
"/sys/devices/virtual/thermal/thermal_zone1/temp"
"/sys/devices/platform/s5p-tmu/curr_temp"
To read the file, I used:
RandomAccessFile reader = new RandomAccessFile("/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp", "r");
String line = reader.readLine();
Here is the another way: Read system files
Here is a current set of paths that are used in production in Dec 2019 to find CPU temperature. There are so many different paths because different OEMs put the temperature in different places.
These three locations are also used in addition to the one listed above:
/sys/htc/cpu_temp
/sys/devices/platform/tegra-i2c.3/i2c-4/4-004c/ext_temperature
/sys/devices/platform/tegra-tsensor/tsensor_temperature
The ones already listed as answer previously still hold true:
/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp
/sys/devices/system/cpu/cpu0/cpufreq/FakeShmoo_cpu_temp
/sys/class/thermal/thermal_zone1/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_zone0/temp
/sys/devices/virtual/thermal/thermal_zone0/temp
/sys/class/hwmon/hwmon0/device/temp1_input
/sys/devices/virtual/thermal/thermal_zone1/temp
/sys/devices/platform/s5p-tmu/curr_temp
Here's a code snippet for how to read those system files. This is classic Unix philosophy 'everything is a file', even sensor readings in this case are accessed by reading a 'file'.
RandomAccessFile reader = new RandomAccessFile("/sys/devices/system/cpu/cpu0/cpufreq/cpu_temp", "r");
String line = reader.readLine();
The result is most likely in milli Celsius, such as 33000
for 33 degree C
, so you need to divide by 1000 to get temperature in C.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With