Узнать что от Observable отписались все подписчики
Есть репозиторий NfcRepository
хотел внутри сделать метод который возвращает состояние самого модуля (а также изменения состояния)
fun getNfcState(): Observable<NfcState>
Есть два варианта:
- внутри метода репозитория запустить observable который каждую секунду чекает nfcAdapter.isEnabled
- подписаться внутри репозитория на броадкаст и реализовать через subject например.
Второй вариант кажется более правильным, но есть вопрос, есть ли в RxJava возможность выполнения какого-то кода при отписке всех подписчиков (чтобы отменить подписку на бродкаст)
p.s. в реализации репозитория будет appContext
Ну или может другой какой вариант?
Ответы (1 шт):
Автор решения: ripple
→ Ссылка
нашел тут примеры https://gist.github.com/magillus/927f863987575021dc78249bd8064423
@NonNull
public static Observable<Intent> create(@NonNull final Context context, @NonNull final IntentFilter intentFilter) {
final Context appContext = context.getApplicationContext();
return Observable.create(emitter -> {
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
emitter.onNext(intent);
}
};
appContext.registerReceiver(receiver, intentFilter);
emitter.setCancellable(() -> appContext.unregisterReceiver(receiver));
});
}