第一種
public static Observable<Intent> receiverObservable(final Context context, final IntentFilter intentFilter) {
return Observable.create(new Observable.OnSubscribe <Intent>() {
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<Intent> receiverObservable2(final Context context, final IntentFilter intentFilter) {
return Observable.fromEmitter(new Action1 <Emitter <Intent>>() {
private BroadcastReceiver receiver;
@Override
public void call(final Emitter <Intent> 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);
}
同理我們可以將系統(tǒng)或者自定義的異步回調(diào)的接口轉(zhuǎn)化成obsevable的方式,當(dāng)然有時(shí)候回調(diào)的方法會(huì)是多個(gè)不像rxjava中提供的onNext百侧,那么我們只能根據(jù)onNext傳參來區(qū)分