Android上的温度传感器

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上试了一下,但是没有成功。

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

看看它的官方规格 。

目前,只有很less的设备有温度传感器(例如三星S4)。

你应该总是testing传感器是否可用,即{

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

你可以在HTC上做什么,就是在系统中find一些其他热敏电阻,并读取sysfspath,如果电话中有任何值,则显示其值,例如电池中的热敏电阻或压力传感器。

这种方法的缺点是这些都是原始的热敏电阻值 – 有时你必须知道,如何将它们转换成摄氏度,更糟糕的是,它们没有得到补偿(因为来自API的温度) – 例如,如果电话将运行一些计算和处理器会加热手机,该值可以轻松地比环境温度高10度,因此并不真正有用…