Android上的温度传感器

时间:2012-08-14 09:29:11

标签: android sensor

 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上尝试过,但它没有用。

2 个答案:

答案 0 :(得分:6)

远至htc x x的规格说,它看起来像这个设备没有温度传感器。

查看official specifications

答案 1 :(得分:1)

目前,只有少数设备具有温度传感器(例如,三星S4)。

您应该始终测试传感器是否可用,即 {

temperatureSensor = sensormanager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE)
if (temperatureSensor != null) {
    /* register listener and do other magic... */
}

你可以在HTC上做些什么,就是在系统中找到一些其他的热敏电阻并读取其值暴露的sysfs路径,例如电池或压力传感器中的热敏电阻,如果手机中有任何热敏电阻的话。

这种方法的缺点是这些是原始的热敏电阻值 - 有时您必须知道,如何将它们转换为摄氏度,更糟糕的是,它们没有得到补偿(因为来自API的温度) - 例如,如果手机会进行一些计算并且处理器会加热手机,那么该值可能比环境温度高10度,因此不太有用......