簡體   English   中英

如何使用 java 獲取 android 中的 CPU 溫度?

[英]How to get the CPU Temperature in android using java?

'''

    Process process;
    try {
        process = Runtime.getRuntime().exec("cat sys/class/thermal/thermal_zone0/temp");
          
        process.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = reader.readLine();
        System.out.println("Multan "+ line);
        if(line!=null) {
            float temp = Float.parseFloat(line);
            return temp / 1000.0f;
        }else{
            return 51.0f;
        }
    } catch (Exception e) {
        e.printStackTrace();
        return 0.0f;
    }

'''

我找到了這個解決方案,但它總是返回 51.0,因為行總是 null。 有人請幫忙。 提前致謝。

首先,像這樣讀取文件是錯誤的,您不需要每次想要獲取溫度時都創建一個新進程。

其次,您可能沒有您要查找的文件。 這是因為 /sys/* 是系統創建的偽文件系統( sysfs ),它是不同的驅動程序。 它可能從一部手機到另一部非常不同。

我找到了一份非詳盡的 cpu 溫度文件列表。

String[] sensorFiles = new String[] {
    "/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"
}

你必須嘗試每一個,直到你得到一個肯定的答案。

File correctSensorFile = null;
for (String file : sensorFiles) {
    File f = new File(file);
    if (f.exists()) {
        correctSensorFile = f;
        break;
    }
}

if (correctSensorFile == null)
    throw new RuntimeException("Did not find sensor file to read");

RandomAccessFile reader = new RandomAccessFile(correctSensorFile , "r");
String value = reader.readLine();
reader.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM