Android系统获取CPU温度的方法
背景
最近研发一款基于Android主板的停车场系统控制板,因为该控制板要放在机箱内随着设备摆放在各个场合,这里面有户外,有室内,有气候干燥地方,当然也有湿度较大的地方。基于此,要求我们的主板要适应各种复杂条件下的环境。除了健壮的程序以外,还需要对主板的系统进行监控,其中一项就是监控CPU的温度。
监控CPU温度,一般采用的是系统提供的API即可完成,然而在linux系列的系统当中并没有提供系统级别的API供开发者调用。通过查阅资料,我们只能通过读取文件内容的办法来获取CPU温度。
具体步骤
原来,linux将很多系统的信息写到了/sys/class/目录下面,其中/sys/class/thermal/目录就是设备温度的目录。
我们提升权限,通过cd到/sys/class/thermal/,该文件夹底下有很多以thermal_zone命名打头的文件夹,每个文件夹下面分别代表不同部位的温度,比如CPU,硬盘,显卡等。一般来说,thermal_zone0文件夹下面的temp文件内容即为CPU温度。
既然知道了温度在哪里存储,接下来就直接上代码,读取CPU温度的代码如下:
public static String getCpuThermal(){
List<String> result = new ArrayList<>();
BufferedReader br = null;
try {
File dir = new File("/sys/class/thermal/");
File[] files = dir.listFiles(file -> {
if (Pattern.matches("thermal_zone[0-9]+", file.getName())) {
return true;
}
return false;
});
final int SIZE = files.length;
String line;
String temp = null;
for (int i = 0; i < SIZE; i++) {
br = new BufferedReader(new FileReader("/sys/class/thermal/thermal_zone" + i + "/temp"));
line = br.readLine();
if (line != null) {
long temperature = Long.parseLong(line);
if (temperature < 0) {
temp = "Unknow";
} else {
temp = (float) (temperature / 1000.0) + "°C";
}
}
break;
}
return temp;
} catch (FileNotFoundException e) {
result.add(e.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "Unknow";
}
这段代码可读性很高,基本上就是跑到某个系统文件下面读取某个值,然后返回即可。
注意:由于系统采用采样的方法记录CPU的温度,所以这个文件我们无需太频繁的读取。
以上,完毕。