Reemplazar callbacks llamados externamente con RxJava

Tengo una aplicación que usa Google Mobile Vision, donde el método de detect(Frame frame) del detector es llamado externamente por el marco. En ese método llamo devoluciones de llamada de la Activity alojamiento:

 override fun detect(frame: Frame?): SparseArray<Barcode> { ... activity.doSomethingOn(theDetections) } 

Debido a la naturaleza reactiva de la lógica, me gustaría introducir ReactiveX en tantos lugares como sea posible, y replace las devoluciones de llamada con la creación de una transmisión. ¿Es posible? Lo siguiente no funciona:

 val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>() .toSingle() .toFlowable() override fun detect(frame: Frame?): SparseArray<Barcode> { ... detections.concatWith(detections.toSingle().toFlowable()) } 

y en actividad esto no se llama en absoluto:

 detector.detections .subscribeOn(AndroidSchedulers.mainThread()) .forEach { info(detections.size) } 

Esto tampoco funciona:

 val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>() .toSingle() .toFlowable() fun lastDetections(): Flowable<SparseArray<Barcode>> = detections override fun detect(frame: Frame?): SparseArray<Barcode> { ... detections.concatWith(detections.toSingle().toFlowable()) lastDetections() } 

y en actividad:

 detector.lastDetections() .subscribeOn(AndroidSchedulers.mainThread()) .forEach { info(detections.size) } 

¿Qué hago mal? ¿Es posible ese reemploop? ¿Tiene, sobre todo, sentido? (Yo diría que sí").

Solutions Collecting From Web of "Reemplazar callbacks llamados externamente con RxJava"