Я пытаюсь создать службу BLE, которая будет сканировать устройства, и с помощью rxKotlin создать наблюдаемый объект, который позволит другому классу наблюдать за обнаружением устройства. Я запутался в том, как создать наблюдаемое, которое позволит подписаться другому классу, и учебники повсюду. Может ли кто-нибудь дать мне указатель на то, как это сделать или хороший учебник.
Обратный вызов класса Bluetoothservice, в котором обнаруживаются устройства
var foundDeviceObservable: Observable<BluetoothDevice> = Observable.create { }
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
with(result.device) {
var foundName = if (name == null) "N/A" else name
foundDevice = BluetoothDevice(
foundName,
address,
address,
result.device.type.toString()
)
foundDeviceObservable.subscribe {
//Update Observable value?
}
}
}
}
class DeviceListViewModel(application: Application) : AndroidViewModel(application) {
private val bluetoothService = BLEService()
//Where I am trying to do logic with device
fun getDeviceObservable(){
bluetoothService.getDeviceObservable().subscribe{ it ->
}
}
Решение
Смог найти решение после прочтения ответа пользователя 4097210. Просто пришлось изменить найденное устройство на
var foundDeviceObservable: BehaviorSubject<BluetoothDevice> = BehaviorSubject.create()
а затем вызовите следующий метод в обратном вызове
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
with(result.device) {
var foundName = if (name == null) "N/A" else name
foundDevice = BluetoothDevice(
foundName,
address,
address,
result.device.type.toString()
)
foundDeviceObservable.onNext(foundDevice)
}
}
}