Android如何用Rxjava监听BroadcastReceiver
16lz
2021-01-26
第一种
public static Observable receiverObservable(final Context context, final IntentFilter intentFilter) { return Observable.create(new Observable.OnSubscribe () { private BroadcastReceiver receiver; @Override public void call(final Subscriber <? super Intent> subscriber) { context.registerReceiver(receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!subscriber.isUnsubscribed()) { subscriber.onNext(intent); } } }, intentFilter); subscriber.add(Subscriptions.create(new Action0() { @Override public void call() { context.unregisterReceiver(receiver); } })); } }); }
第二种
public static Observable receiverObservable2(final Context context, final IntentFilter intentFilter) { return Observable.fromEmitter(new Action1 >() { private BroadcastReceiver receiver; @Override public void call(final Emitter intentEmitter) { context.registerReceiver(receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { intentEmitter.onNext(intent); } }, intentFilter); intentEmitter.setCancellation(new Cancellable() { @Override public void cancel() throws Exception { context.unregisterReceiver(receiver); } }); } }, Emitter.BackpressureMode.BUFFER); }
同理我们可以将系统或者自定义的异步回调的接口转化成obsevable的方式,当然有时候回调的方法会是多个不像rxjava中提供的onNext,那么我们只能根据onNext传参来区分
更多相关文章
- RadioGroup控件(接口类监听事件)
- Android4.4.X调用Alarmmanager接口
- android OTA修改
- 第二章实例:Android窗口菜单显示
- Android(安卓)技术专题系列之七 -- 输入法 框架
- 2.2 窗口屏幕参数及UI样式---Display 和Style
- Android(安卓)5.0 Camera2新接口
- Android业务层代码结构扩展 - from MVP to MVPplus
- Android异步接口测试