事件监听
列表与状态通过 Flow / StateFlow 提供。每个长期运行的 collect 必须放入独立的子协程;合并列表使用 kotlinx.coroutines.flow.combine。Android 还提供蓝牙扫描失败事件。下面代码放在 Activity/Fragment 的合适生命周期作用域中,退出时取消对应 Job。
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()