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

Deseo obtener la temperatura del dispositivo.Sensor de temperatura en Android

Escribí este código y lo probé en HTC One X, pero no funcionó.

+0

se puede publicar la salida o error. – prayagupd

+0

nada hecho. No hay error. sin notificación sin resultado – Furkan

+0

¿El HTC One X incluso tiene un sensor de temperatura? – nkr

Respuesta

6

A la especificación de htc que dice una x, parece que este dispositivo no tiene sensor de temperatura.

Echa un vistazo en su official specifications.

+0

ovv. tienes razón. gracias – Furkan

+2

Hay una aplicación en el mercado Android llamada "Sensor Andro" que le brindará la información de los sensores disponibles y no disponibles para su dispositivo. Pruébelo – AndroidCrazy

1

Por el momento, solo algunos dispositivos tienen sensor de temperatura (por ejemplo, Samsung S4).

Debe probar siempre si el sensor está disponible, es decir, {

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

Lo que puede hacer en HTC, es encontrar alguna otra termistor en el sistema y leer ruta sysfs, donde se expone su valor , por ejemplo, termistor en la batería o en el sensor de presión, si hay alguno en este teléfono.

El inconveniente de este enfoque es que estos son valores crudos de termistor; a veces hay que saber cómo convertirlos a grados celsius y, lo que es peor, no se compensan (como la temperatura de API), por ejemplo, si el teléfono se ejecutará algún cálculo y el procesador se calienta el teléfono, ese valor puede ser fácilmente 10 degreess superior a la temperatura ambiente y por lo tanto no es realmente útil ...

Cuestiones relacionadas