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 SensorMagnetic extends Activity implements SensorEventListener { private boolean hassensor; private final Handler magneticEventHandler = new Handler() { @Override public void handleMessage(Message msg) { Bundle data = msg.getData(); ((TextView) findViewById(R.id.magxtext)).setText(data.getString("x")); ((TextView) findViewById(R.id.magytext)).setText(data.getString("y")); ((TextView) findViewById(R.id.magztext)).setText(data.getString("z")); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(getMagneticSensors() == null) { hassensor = false; Toast.makeText(this, "No Magnetic Sensors Available", Toast.LENGTH_SHORT).show(); finish(); return; } hassensor = true; setContentView(R.layout.sensormagnetic); setTitle("Magnetic"); } @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } @Override protected void onPause() { super.onPause(); unregisterListener(); } private List<Sensor> getMagneticSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> list = mngr.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); return list != null && !list.isEmpty() ? list : null; } private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> list = getMagneticSensors(); 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 magx = event.values[0]; float magy = event.values.length > 1 ? event.values[1] : 0; float magz = event.values.length > 2 ? event.values[2] : 0; Bundle data = new Bundle(); data.putString("x", "Mag X: "+magx+" uT"); data.putString("y", "Mag Y: "+magy+" uT"); data.putString("z", "Mag Z: "+magz+" uT"); Message msg = Message.obtain(); msg.setData(data); magneticEventHandler.sendMessage(msg); } }