Если вы знакомы с RxJava и реактивным программированием, вы можете использовать мою библиотеку с открытым исходным кодом, которая называется ReactiveSensors. Это обертка вокруг SensorManager
из Android SDK и позволяет отслеживать изменения датчиков, излучаемые как наблюдаемый поток.
Вы можете использовать библиотеку следующим образом:
добавить следующую зависимость для вашего build.gradle
файла:
dependencies {
compile 'com.github.pwittchen:reactivesensors:0.1.2'
}
, а затем, вы можете использовать библиотеку в вашем коде:
new ReactiveSensors(this).observeSensor(Sensor.TYPE_ORIENTATION)
.subscribeOn(Schedulers.computation())
.filter(ReactiveSensorEvent.filterSensorChanged())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<ReactiveSensorEvent>() {
@Override public void call(ReactiveSensorEvent reactiveSensorEvent) {
SensorEvent event = reactiveSensorEvent.getSensorEvent();
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
String format = "orientation sensor readings:\n x = %f\n y = %f\n z = %f";
String message = String.format(format, x, y, z);
tvSensor.setText(message);
}
});
В вашем случае вы можете использовать Sensor.TYPE_ORIENTATION
, но он работает со всеми типами датчиков, доступных на устройствах Android.
Полный рабочий образец код доступен по адресу: https://github.com/pwittchen/ReactiveSensors/blob/master/app/src/main/java/com/github/pwittchen/reactivesensors/app/samples/OrientationActivity.java
Подробное описание библиотеки, ее исходный код и образец работает приложение доступно по адресу: https://github.com/pwittchen/ReactiveSensors