package com.oreilly.demo.android.pa.sensordemo; import java.util.List; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; import android.widget.Toast; public class SensorTemp extends Activity implements SensorEventListener { private boolean hassensor; private final Handler tempEventHandler = new Handler() { @Override public void handleMessage(Message msg) { String temp = (String) msg.obj; ((TextView) findViewById(R.id.temptext)).setText(temp); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(getTempSensors() == null) { hassensor = false; Toast.makeText(this, "No Temperature Sensors Available", Toast.LENGTH_SHORT).show(); finish(); return; } hassensor = true; setContentView(R.layout.sensortemp); setTitle("Temperature"); } @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } @Override protected void onPause() { super.onPause(); unregisterListener(); } private List<Sensor> getTempSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> list = mngr.getSensorList(Sensor.TYPE_TEMPERATURE); return list != null && !list.isEmpty() ? list : null; } private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> list = getTempSensors(); if(list != null) { for(Sensor sensor: list) { mngr.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI); } } } private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mngr.unregisterListener(this); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float temp = event.values[0]; Message msg = Message.obtain(); msg.obj = "Temp: "+temp+" C"; tempEventHandler.sendMessage(msg); } }