我正在开发一个应用程序,我不知道如何获得CPU使用率和温度,例如在textview中。
我尝试使用TYPE_AMBIENT_TEMPERATURE
来获取温度,但它不起作用。
日志说“我没有传感器”,但通过使用游戏商店中的其他应用程序,我得到温度和频率..
如果我使用其他传感器(例如TYPE_GYROSCOPE
或其他传感器),代码可以正常工作,所以我不明白TYPE_AMBIENT_TEMPERATURE
如何不起作用..
抱歉我的英语不好......请帮助我..
答案 0 :(得分:1)
可以使用的CPU频率
public static int[] getCPUFrequencyCurrent() throws Exception {
int[] output = new int[getNumCores()];
for(int i=0;i<getNumCores();i++) {
output[i] = readSystemFileAsInt("/sys/devices/system/cpu/cpu"+String.valueOf(i)+"/cpufreq/scaling_cur_freq");
}
return output;
}
你也可能想要使用这个:
public static int getNumCores() {
//Private Class to display only CPU devices in the directory listing
class CpuFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
//Check if filename is "cpu", followed by a single digit number
if(Pattern.matches("cpu[0-9]+", pathname.getName())) {
return true;
}
return false;
}
}
try {
//Get directory containing CPU info
File dir = new File("/sys/devices/system/cpu/");
//Filter to only list the devices we care about
File[] files = dir.listFiles(new CpuFilter());
//Return the number of cores (virtual CPU devices)
return files.length;
} catch(Exception e) {
//Default to return 1 core
return 1;
}
}
表示温度(https://stackoverflow.com/a/11931903/1031297)
public class TempSensorActivity extends Activity, implements SensorEventListener {
private final SensorManager mSensorManager;
private final Sensor mTempSensor;
public TempSensorActivity() {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mTempSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mTempSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
PS。您首先需要检查传感器是否存在......如果不存在,则无法完成任何操作。我猜一些应用程序谎言。
PS2。您可以随时对应用程序进行逆向工程,以查看它们如何显示温度;)
答案 1 :(得分:1)
这是因为您的设备根本没有温度计。许多旧设备没有它。 Android文档称设备“MAY”内置了这些传感器,但并非“必须”拥有它们。
显示温度的其他应用程序是按照自己的方法计算的(可能在某些范围内都有所不同)
我目前正在制作自己的应用程序来测量CPU温度......
答案 2 :(得分:0)
正如OWADVL回答的那样,您还可以将温度作为系统文件来准备,如下所示:
int temperature = readSystemFileAsInt("sys/class/thermal/thermal_zone0/temp");
请注意,readSystemFileAsInt不是系统调用。我找到了实现here
private static int readSystemFileAsInt(final String pSystemFile) throws Exception {
InputStream in = null;
try {
final Process process = new ProcessBuilder(new String[] { "/system/bin/cat", pSystemFile }).start();
in = process.getInputStream();
final String content = readFully(in);
return Integer.parseInt(content);
} catch (final Exception e) {
throw new Exception(e);
}
}
private static final String readFully(final InputStream pInputStream) throws IOException {
final StringBuilder sb = new StringBuilder();
final Scanner sc = new Scanner(pInputStream);
while(sc.hasNextLine()) {
sb.append(sc.nextLine());
}
return sb.toString();
}
关于CPU使用率(负载),您可以在this question上查看Souch在其gitHub here上已经可以使用的解决方案