package at.abraxas.amarino.example.plugin.compass; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.preference.PreferenceManager; import android.util.Log; import at.abraxas.amarino.Amarino; import at.abraxas.amarino.plugin.BackgroundService; public class MyBackgroundService extends BackgroundService implements SensorEventListener, OnSharedPreferenceChangeListener { private static final String TAG = "Example Compass Plugin"; private static final boolean DEBUG = true; private SensorManager sm; private Sensor orientationSensor; private int frequency; private int ignoreThreshold = 0; private int ignoreCounter = 0; public MyBackgroundService(){ super(TAG, DEBUG); } @Override public boolean init() { /* here should be your specific initialization code */ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); frequency = prefs.getInt(MyEditActivity.PREF_FREQUENCY, 50); ignoreThreshold = MyEditActivity.getRate(frequency); prefs.registerOnSharedPreferenceChangeListener(this); // make sure not to call it twice sm = (SensorManager) getSystemService(SENSOR_SERVICE); orientationSensor = sm.getSensorList(Sensor.TYPE_ORIENTATION).get(0); sm.registerListener(this, orientationSensor, SensorManager.SENSOR_DELAY_UI); return true; } @Override public void cleanup() { sm.unregisterListener(this); PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this); } public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION){ if (ignoreCounter >= ignoreThreshold) { ignoreCounter = 0; int heading = (int)event.values[0]; if (DEBUG) Log.d(TAG, "send: " + heading); Amarino.sendDataFromPlugin(this, pluginId, heading); } else { ignoreCounter++; } } } public void onAccuracyChanged(Sensor sensor, int accuracy) { // we don't need this } public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if (MyEditActivity.PREF_FREQUENCY.equals(key)){ ignoreThreshold = MyEditActivity.getRate(prefs.getInt(key, 50)); } } }