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);
}
}