Android SDK
Event Listening

Event Listeners

Lists and states use Flow / StateFlow. Collect each long-lived stream in a separate child coroutine. Use kotlinx.coroutines.flow.combine to merge device lists. Android also exposes BLE scan errors. Run this example in an appropriate Activity/Fragment lifecycle scope and cancel its Job when finished.

import com.gizwits.smart.sdk.GizSDKManager
import com.gizwits.smart.sdk.bluetooth.bleCapability
import com.gizwits.smart.sdk.bluetooth.subscribeBluetoothDeviceList
import com.gizwits.smart.sdk.bluetooth.subscribeBleScanError
import com.gizwits.smart.sdk.lan.subscribeLanDeviceList
import com.gizwits.smart.sdk.mqtt.subscribeBoundDeviceList
import com.gizwits.smart.sdk.mqtt.subscribeBindEvent
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
 
val listenerJob = lifecycleScope.launch {
    launch {
        GizSDKManager.subscribeBindEvent().collect { (did, isBind) ->
            println("$did: $isBind")
        }
    }
    launch {
        combine(
            GizSDKManager.subscribeBoundDeviceList(),
            GizSDKManager.subscribeBluetoothDeviceList(),
            GizSDKManager.subscribeLanDeviceList()
        ) { bound, ble, lan ->
            (bound + ble + lan).distinctBy { it.id }
        }.collect { devices -> println(devices) }
    }
    launch { GizSDKManager.subscribeBleScanError().collect { println(it) } }
    launch { device.bleCapability.subscribeStatus().collect { println(it) } }
    launch { device.bleCapability.subscribeIsLogin().collect { println(it) } }
    launch { device.bleCapability.subscribeModuleProfile().collect { println(it) } }
    launch { device.bleCapability.subscribeDp().collect { println(it) } }
}
// Stop these listeners:
// listenerJob.cancel()