2012-08-14 144 views
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()); 
    } 
} 

我想從設備獲取溫度。Android上的溫度傳感器

我寫了這段代碼,我試了一下HTC One X,但沒有奏效。

+0

您可以發佈輸出或錯誤。 – prayagupd 2012-08-14 09:38:52

+0

沒有做。沒有錯誤。沒有通知。沒有結果 – Furkan 2012-08-14 09:39:50

+0

HTC One X是否有溫度傳感器?當然是 – nkr 2012-08-14 09:49:05

回答

6

就像htc one x的規格說的那樣,它看起來像這個設備沒有溫度傳感器。

看看它的official specifications

+0

ovv。你是對的。謝謝 – Furkan 2012-08-14 09:59:43

+2

安卓市場上有一個名爲「Andro Sensor」的應用程序,它會爲您提供設備可用和不可用傳感器的信息。試試看 – AndroidCrazy 2012-09-11 05:41:45

1

目前,只有很少的設備有溫度傳感器(例如三星S4)。

你應該總是測試,如果傳感器可用,即 {

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

你可以在HTC做的,就是找到系統中的一些其他熱敏電阻器和讀取sysfs的路徑,其中它的價值被暴露,例如電池中的熱敏電阻或壓力傳感器,如果此電話中有電熱調節器。

這種方法的缺點是這些都是原始的熱敏電阻值 - 有時你必須知道,如何將它們轉換成攝氏度,更糟糕的是,它們沒有得到補償(因爲來自API的溫度) - 例如,如果手機運行一些計算,處理器會加熱手機,那麼該值可能比環境溫度高出10度,因此並不真正有用...

相關問題