public class MainActivity extends Activity implements SensorEventListener {
private TextView temperaturelabel;
private SensorManager sensormanager;
private Sensor temperature;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
temperaturelabel = (TextView) findViewById(R.id.text);
sensormanager = (SensorManager)getSystemService(SENSOR_SERVICE);
temperature= sensormanager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
temperaturelabel.setText(""+temperature.getPower());
}
protected void onResume() {
super.onResume();
sensormanager.registerListener(this, temperature, SensorManager.SENSOR_DELAY_FASTEST);
}
protected void onPause() {
super.onPause();
sensormanager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_AMBIENT_TEMPERATURE) return;
temperaturelabel.setText(""+temperature.getPower());
}
}
我想从设备中获取温度。
我编写了这段代码,我在HTC One X上尝试过,但它没有用。
答案 0 :(得分:6)
远至htc x x的规格说,它看起来像这个设备没有温度传感器。
答案 1 :(得分:1)
目前,只有少数设备具有温度传感器(例如,三星S4)。
您应该始终测试传感器是否可用,即 {
temperatureSensor = sensormanager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE)
if (temperatureSensor != null) {
/* register listener and do other magic... */
}
你可以在HTC上做些什么,就是在系统中找到一些其他的热敏电阻并读取其值暴露的sysfs路径,例如电池或压力传感器中的热敏电阻,如果手机中有任何热敏电阻的话。
这种方法的缺点是这些是原始的热敏电阻值 - 有时您必须知道,如何将它们转换为摄氏度,更糟糕的是,它们没有得到补偿(因为来自API的温度) - 例如,如果手机会进行一些计算并且处理器会加热手机,那么该值可能比环境温度高10度,因此不太有用......