BLEスキャンが10秒間アクティブ化されてから10秒間中断され、ビューがアクティブな間に繰り返される機能を実装したいと考えています。ObservableからBLEスキャンを定期的に購読および登録解除する
私は反応性のためにAndroid BLE APIをラップするRxAndroidBle
を使用しています。私は方法scanForRange(getConnectAddress());
Observable<RxBleScanResult>
を使用していくつかのフィルタとマップを適用して、単純な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秒ごとの開始/停止の代わりに結果を連続して送信するため、これは機能しません。
この機能を実装するにはどうすればよいでしょうか? ObservablesとHandlersが混在していると思われるかもしれないが、それは間違っているようだ。
を使用してこれを行うことができます。ありがとう!私はあなたの答えを正しいものとしてマークします。 – Orbit