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

4

2 回答 2

6

就 htc one x 的规格而言,它看起来这个设备没有温度传感器。

看看它的官方规格

于 2012-08-14T09:53:53.747 回答
1

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

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

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

您可以在 HTC 上做的,是在系统中找到其他一些热敏电阻并读取 sysfs 路径,它的值暴露在哪里,例如,电池中的热敏电阻或压力传感器中的热敏电阻,如果这部手机中有的话。

这种方法的缺点是这些是原始热敏电阻值 - 有时你必须知道如何将它们转换为摄氏度,更糟糕的是,它们没有得到补偿(就像来自 API 的温度一样) - 例如,如果手机会运行一些计算,处理器会加热手机,这个值很容易比环境温度高 10 度,因此不是很有用......

于 2014-04-03T08:58:53.937 回答