package io.myweb.examples; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import java.util.ArrayList; import java.util.List; import io.myweb.LocalService; public class SensorService extends LocalService<SensorService> implements SensorEventListener { private SensorManager sensorManager; private volatile SensorEvent sensorValue; private int currentType = 0; public SensorService() { } @Override public void onCreate() { super.onCreate(); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); } @Override public void onDestroy() { super.onDestroy(); sensorManager.unregisterListener(this); } public List<Integer> getAvailableSensorTypes() { List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); List<Integer> typeList = new ArrayList<Integer>(sensorList.size()); for (Sensor s: sensorList) { typeList.add(s.getType()); } return typeList; } public Sensor getDefaultSensor(int type) { return sensorManager.getDefaultSensor(type); } public SensorEvent getLastSensorEvent(int type) { Sensor s = sensorManager.getDefaultSensor(type); if (s == null) return null; if (currentType != type) { sensorManager.unregisterListener(this); sensorValue = null; sensorManager.registerListener(this, s, 1000000); currentType = type; synchronized (this) { try { wait(4000); } catch (InterruptedException e) { e.printStackTrace(); } } } return sensorValue; } @Override public synchronized void onSensorChanged(SensorEvent sensorEvent) { sensorValue = sensorEvent; notifyAll(); } @Override public void onAccuracyChanged(Sensor sensor, int i) { } }