BLE 스캔이 10 초 동안 활성화 된 다음 10 초 동안 중단되고 뷰가 활성 상태 인 동안 반복되는 기능을 구현하고 싶습니다.BLE 스캔을 위해 Observable에서 지속적으로 가입 및 가입 취소
나는 반응성을 위해 Android BLE API를 래핑하는 RxAndroidBle
을 사용하고 있습니다. 나는 Observable<RxBleScanResult>
을 사용하는 방법 scanForRange(getConnectAddress());
과 간단한 필터 Observable<Integer>
을 반환하기 위해 적용된 일부 필터와 맵을 가지고있다. 검사를 시작하려면이 관찰 가능 항목을 간단히 구독하고 구독을 취소 한 다음 검사를 중지해야합니다. 그때 내 onPause()
에 그 가입에서 탈퇴 할
@Override
protected void onResume() {
super.onResume();
mRangeScanSubscription = Observable.interval(10000, TimeUnit.MILLISECONDS)
.flatMap(new Func1<Long, Observable<Integer>>() {
@Override
public Observable<Integer> call(Long aLong) {
return scanForRange(getConnectAddress());
}
})
.observeOn(AndroidSchedulers.mainThread())
.doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Log.d(TAG, "onResume() error");
throwable.printStackTrace();
}
})
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Toast.makeText(DeviceDetailActivity.this, "Range: " + integer, Toast.LENGTH_SHORT).show();
}
});
}
: 아래 그림과 같이
내 첫번째 생각은 Observable.interval()
를 사용하는 것이 었습니다. 이제는 첫 번째 간격이 방출되면 스캔이 구독되고 10 초마다 시작/중지되는 inteded가 아닌 결과를 계속 방출합니다.
그러면이 기능을 구현하는 가장 좋은 방법은 무엇입니까? Observables와 Handlers를 함께 사용하여 해킹 할 수 있다고 생각하지만 잘못된 것 같습니다.
를 사용하여이 작업을 수행 할 수 있습니다. 감사! 나는 당신의 답을 옳은 것으로 표시 할 것입니다. – Orbit