在做項目過程中,有時需要獲取手機CPU的溫度。
目前市面上常見的CPU主要有兩種:MTK(聯發科)、Qualcomm(高通)。當然還有我們華爲的海思麒麟CPU,以及三星的CPU。後兩種CPU在本篇文章中就不做展開,有興趣的同學,可以自行去研究研究。
通過研究發現,CPU的信息基本都是在/sys/class/thermal/目錄下,通過adb shell、cat相關命令可以拿到一些手機的CPU信息,基本步驟如下:
1、打開終端命令窗口,如windows下的cmd程序。
2、輸入adb shell,回車。
3、輸入cat /sys/class/thermal/thermal_zone7/type,回車。其中7只是一個示例,不同的手機可能會有區別。此命令可以獲取相關的硬件類別。
4、輸入cat /sys/class/thermal/thermal_zone7/temp,回車。就可以獲取對應的溫度值。
至此,可能MTK、Qualcomm的CPU怎麼區分呢?
這裏有一個小竅門:MTK的CPU名稱類似爲mtktscpu,Qualcomm的CPU名稱類似爲tsens_tz_sensor。
說了這麼多,那在Android程序裏如何去實現呢?
重點來了,準備好了嗎?
public static String getCpuTemp() {
String temp = "Unknow";
BufferedReader br = null;
FileReader fr = null;
try {
File dir = new File("/sys/class/thermal/");
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (Pattern.matches("thermal_zone[0-9]+", file.getName())) {
return true;
}
return false;
}
});
final int SIZE = files.length;
String line = "";
String type = "";
for (int i = 0; i < SIZE; i++) {
fr = new FileReader("/sys/class/thermal/thermal_zone" + i + "/type");
br = new BufferedReader(fr);
line = br.readLine();
if (line != null) {
type = line;
}
fr = new FileReader("/sys/class/thermal/thermal_zone" + i + "/temp");
br = new BufferedReader(fr);
line = br.readLine();
if (line != null) {
// MTK CPU
if (type.contains("cpu")) {
long temperature = Long.parseLong(line);
if (temperature < 0) {
temp = "Unknow";
} else {
temp = (float) (temperature / 1000.0) + "";
}
} else if (type.contains("tsens_tz_sensor")) {
// Qualcomm CPU
long temperature = Long.parseLong(line);
if (temperature < 0) {
temp = "Unknow";
} else if (temperature > 100){
temp = (float) (temperature / 10.0) + "";
} else {
temp = temperature + "";
}
}
}
}
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
} catch (Exception e) {
LogUtil.e(e);
} finally {
if (fr != null) {
try {
fr.close();
} catch (Exception e) {
LogUtil.e(e);
}
}
if (br != null) {
try {
br.close();
} catch (Exception e) {
LogUtil.e(e);
}
}
}
return temp;
}
這裏只是提供一個基本的思路,大家可以在此基礎上進行完善和擴展。
歡迎大家各抒己見,O(∩_∩)O哈哈~