Узнать что от Observable отписались все подписчики

Есть репозиторий NfcRepository

хотел внутри сделать метод который возвращает состояние самого модуля (а также изменения состояния)

fun getNfcState(): Observable<NfcState>

Есть два варианта:

  1. внутри метода репозитория запустить observable который каждую секунду чекает nfcAdapter.isEnabled
  2. подписаться внутри репозитория на броадкаст и реализовать через 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));
            });
        }
→ Ссылка