Simple RxJava2 wrapper for Android BroadcastReceiver
RxReceivers.from("YOUR ACTION HERE", context)
.subscribe(intent -> {
//do what you want here, but don't forget to unsubscribe
});
class BroadcastDisposable implements Disposable { | |
private BroadcastReceiver receiver; | |
private Context ctx; | |
private boolean isDisposed = false; | |
BroadcastDisposable(@NonNull BroadcastReceiver receiver, @NonNull Context ctx) { | |
this.receiver = receiver; | |
this.ctx = ctx; | |
} | |
@Override | |
public void dispose() { | |
if (!isDisposed) { | |
ctx.unregisterReceiver(receiver); | |
isDisposed = true; | |
} | |
} | |
@Override | |
public boolean isDisposed() { | |
return isDisposed; | |
} | |
} |
public class RxReceivers { | |
public static Observable<Intent> from(@NonNull final String action, @NonNull final Context ctx) { | |
IntentFilter filter = new IntentFilter(action); | |
return from(filter, ctx); | |
} | |
public static Observable<Intent> from(@NonNull final IntentFilter intentFilter, @NonNull final Context ctx) { | |
return Observable.create(new ObservableOnSubscribe<Intent>() { | |
Context appContext = ctx.getApplicationContext(); | |
@Override | |
public void subscribe(@NonNull final ObservableEmitter<Intent> emitter) throws Exception { | |
BroadcastReceiver receiver = new BroadcastReceiver() { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
emitter.onNext(intent); | |
} | |
}; | |
emitter.setDisposable(new BroadcastDisposable(receiver, appContext)); | |
appContext.registerReceiver(receiver, intentFilter); | |
} | |
}); | |
} | |
} |
Just regular rx java way, subscribe() returns disposable, it is used for unsubscription.
How do I use it?
RxReceiver is going to register the receiver. After that, how do I unregister it?