Android SDK
事件监听

事件监听

列表与状态通过 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()