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

Chcę uzyskać temperaturę z urządzenia.Czujnik temperatury na Androidzie

Napisałem ten kod i wypróbowałem go na HTC One X, ale nie zadziałało.

+0

Czy możesz opublikować wyjście lub błąd. – prayagupd

+0

nic nie zostało zrobione. żaden błąd. bez powiadomienia. brak wyniku – Furkan

+0

Czy HTC One X ma nawet czujnik temperatury? – nkr

Odpowiedz

6

O ile specyfikacja htc jeden x mówi, wygląda tak, jak to urządzenie nie ma czujnika temperatury.

Zobacz jego official specifications.

+0

ovv. masz rację. dzięki – Furkan

+2

Istnieje aplikacja na rynku Android o nazwie "Sensor Andro", która da Ci informacje o dostępnych i niedostępnych czujnikach urządzenia. Spróbuj – AndroidCrazy

1

Obecnie tylko kilka urządzeń ma czujnik temperatury (np. Samsung S4).

Zawsze należy sprawdzić, czy czujnik jest dostępna, to znaczy, {

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

Co można zrobić na HTC, jest znalezienie innego termistora w systemie i odczytać sysfs ścieżkę, gdy jego wartość jest narażona np. termistor w akumulatorze lub czujnik ciśnienia, jeśli jest w nim jakikolwiek telefon.

Wadą tego podejścia jest to, że są to wartości surowego termistora - czasami trzeba wiedzieć, jak je konwertować na stopnie Celsjusza, a co gorsza, nie są one kompensowane (jak temperatura z API) - więc np. jeśli telefon uruchomi jakieś obliczenia, a procesor nagrzeje telefon, wartość ta może być z łatwością 10 stopni wyższa niż temperatura otoczenia, a zatem nie jest zbyt użyteczna ...