library/src/main/java/com/github/pwittchen/reactivesensors/library/ReactiveSensors.java
public Flowable<ReactiveSensorEvent> observeSensor(int sensorType, final int samplingPeriodInUs,
      final Handler handler, final BackpressureStrategy strategy) {

    if (!hasSensor(sensorType)) {
      String format = "Sensor with id = %d is not available on this device";
      String message = String.format(Locale.getDefault(), format, sensorType);
      return Flowable.error(new SensorNotFoundException(message));
    }

    final Sensor sensor = sensorManager.getDefaultSensor(sensorType);
    final SensorEventListenerWrapper wrapper = new SensorEventListenerWrapper();
    final SensorEventListener listener = wrapper.create();

    return Flowable.create(new FlowableOnSubscribe<ReactiveSensorEvent>() {
      @Override public void subscribe(final FlowableEmitter<ReactiveSensorEvent> emitter)
          throws Exception {

        wrapper.setEmitter(emitter);

        if (handler == null) {
          sensorManager.registerListener(listener, sensor, samplingPeriodInUs);
        } else {
          sensorManager.registerListener(listener, sensor, samplingPeriodInUs, handler);
        }
      }
    }, strategy).doOnCancel(new Action() {
      @Override public void run() throws Exception {
        sensorManager.unregisterListener(listener);
      }
    });
  }
public Flowable<ReactiveSensorEvent> observeSensor(int sensorType, final int samplingPeriodInUs,
      final Handler handler, final BackpressureStrategy strategy) {

    if (!hasSensor(sensorType)) {
      String format = "Sensor with id = %d is not available on this device";
      String message = String.format(Locale.getDefault(), format, sensorType);
      return Flowable.error(new SensorNotFoundException(message));
    }

    final Sensor sensor = sensorManager.getDefaultSensor(sensorType);
    final SensorEventListenerWrapper wrapper = new SensorEventListenerWrapper();
    final SensorEventListener listener = wrapper.create();

    return Flowable.create(new FlowableOnSubscribe<ReactiveSensorEvent>() {
      @Override public void subscribe(final FlowableEmitter<ReactiveSensorEvent> emitter)
          throws Exception {

        wrapper.setEmitter(emitter);

        if (handler == null) {
          sensorManager.registerListener(listener, sensor, samplingPeriodInUs);
        } else {
          sensorManager.registerListener(listener, sensor, samplingPeriodInUs, handler);
        }
      }
    }, strategy).doOnCancel(new Action() {
      @Override public void run() throws Exception {
        sensorManager.unregisterListener(listener);
      }
    });
  }
public Flowable < ReactiveSensorEvent > observeSensor ( int sensorType , final int samplingPeriodInUs , final Handler handler , final BackpressureStrategy strategy ) { if ( ! hasSensor ( sensorType ) ) { String format = "Sensor with id = %d is not available on this device" ; String message = String . format ( Locale . getDefault ( ) , format , sensorType ) ; return Flowable . error ( new SensorNotFoundException ( message ) ) ; } final Sensor sensor = sensorManager . getDefaultSensor ( sensorType ) ; final SensorEventListenerWrapper wrapper = new SensorEventListenerWrapper ( ) ; final SensorEventListener listener = wrapper . create ( ) ; return Flowable . create ( new FlowableOnSubscribe < ReactiveSensorEvent > ( ) { @ Override public void subscribe ( final FlowableEmitter < ReactiveSensorEvent > emitter ) throws Exception { wrapper . setEmitter ( emitter ) ; if ( handler == null ) { sensorManager . registerListener ( listener , sensor , samplingPeriodInUs ) ; } else { sensorManager . registerListener ( listener , sensor , samplingPeriodInUs , handler ) ; } } } , strategy ) . doOnCancel ( new Action ( ) { @ Override public void run ( ) throws Exception { sensorManager . unregisterListener ( listener ) ; } } ) ; }
Returns RxJava Observable, which allows to monitor hardware sensors
as a stream of ReactiveSensorEvent object with defined sampling period

@param sensorType sensor type from Sensor class from Android SDK
@param samplingPeriodInUs sampling period in microseconds,
@param handler the Handler the sensor events will be delivered to, use default if it is null
you can use predefined values from SensorManager class with prefix SENSOR_DELAY
@param strategy BackpressureStrategy for RxJava 2 Flowable type
@return RxJava Observable with ReactiveSensorEvent
Returns RxJava Observable which allows to monitor hardware sensors as a stream of ReactiveSensorEvent object with defined sampling period