Android系统获取CPU温度的方法

2021-06-22T11:20:00

背景

最近研发一款基于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的温度,所以这个文件我们无需太频繁的读取。

以上,完毕。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »