Wi-Fi 列表获取

更新时间:2025-05-20 03:23:18下载pdf

功能概述

对于使用 TuyaOS v3.10.0 或更新版本的双模设备,提供了设备主动获取周围 Wi-Fi 列表的功能。该功能具有以下优势:

  • 解决权限限制:解决因手机 App 权限的限制导致无法获取完整 Wi-Fi 列表的问题。
  • 保证兼容性:设备返回的 Wi-Fi 列表均为其能够成功连接的网络。
  • 提升成功率:避免用户选择设备无法连接的 Wi-Fi,有效提高配网成功率。

功能实现

搜索设备

代码示例

ThingActivatorCoreKit.getScanDeviceManager().startBlueToothDeviceSearch(
    60 * 1000,
    arrayListOf(ScanType.SINGLE),
    object : ThingActivatorScanCallback {
        override fun deviceFound(scanBean: ThingActivatorScanDeviceBean) {
            // 搜索到设备后,检查是否支持获取 Wi-Fi 列表功能
            if (scanBean.isSupportObtainWifiListBeforeActive()) {
                // 设备支持获取 Wi-Fi 列表
            }
        }

        override fun deviceRepeat(scanBean: ThingActivatorScanDeviceBean) {
        }

        override fun deviceUpdate(scanBean: ThingActivatorScanDeviceBean) {
        }

        override fun scanFailure(failureBean: ThingActivatorScanFailureBean) {
        }

        override fun scanFinish() {
        }
    }
)

参数说明

参数 说明
millisTimeOut 搜索超时时间(单位:毫秒/ms,建议 60,000 ms)
scanTypeList SINGLE - 使用蓝牙低功耗(Bluetooth Low Energy,BLE)类型设备扫描
thingActivatorScanCallback 扫描结果回调

获取 Wi-Fi 列表

请求参数说明

data class WifiInfoRequestBean(  
    var size: Int = 10,                    // 期望返回的 Wi-Fi 列表数量
    var timeout: Long = 5000L,             // 设备扫描超时时间(单位:毫秒/ms)
    var uuid: String = "",                 // 蓝牙设备的 UUID
    var spaceId: Long = -1,               // 家庭 ID
    var modeEnum: ThingDeviceActiveModeEnum = ThingDeviceActiveModeEnum.BLE_WIFI,  
    var scanDeviceBean: ThingActivatorScanDeviceBean? = null  // 配网前查询时传入的设备对象
)

代码示例

val wifiReqBean = WifiInfoRequestBean().apply {
    uuid = thingActivatorScanDeviceBean.uniqueId
    size = 10
    timeout = 5000L
    modeEnum = ThingDeviceActiveModeEnum.BLE_WIFI
    scanDeviceBean = thingActivatorScanDeviceBean
}

ThingActivatorCoreKit.getActiveManager().newThingActiveManager().requestWifiList(
    wifiReqBean,
    object : IResultResponse<List<ThingActiveWifiInfoBean>> {
        override fun onError(errorCode: String?, errorMessage: String?) {
            // Wi-Fi 列表获取失败
        }

        override fun onSuccess(result: List<ThingActiveWifiInfoBean>) {
            // Wi-Fi 列表获取成功
        }
    }
)

开始配网

获取到 Wi-Fi 列表后,用户可以从设备扫描到的列表中选择网络,然后进行配网:

val activeManager = ThingActivatorCoreKit.getActiveManager().newThingActiveManager()
activeManager.startActive(ThingDeviceActiveBuilder().apply {
    activeModel = ThingDeviceActiveModeEnum.BLE_WIFI
    ssid = "WiFi SSID"
    password = "WiFi Password"
    timeOut = 120
    relationId = homeId
    listener = object : IThingDeviceActiveListener {
        override fun onActiveSuccess(deviceBean: DeviceBean) {
            // 配网成功
        }

        override fun onActiveError(errorBean: ThingDeviceActiveErrorBean) {
            // 配网失败
        }

        override fun onActiveLimited(limitBean: ThingDeviceActiveLimitBean) {
        }

        override fun onBind(devId: String) {
        }

        override fun onFind(devId: String) {
        }
    }
})

注意事项

  • 该功能仅支持 TuyaOS v3.10.0 及以上版本的双模设备。
  • 使用前必须通过 isSupportObtainWifiListBeforeActive() 检查设备是否支持该功能。
  • 获取 Wi-Fi 列表时需要考虑超时时间的设置,建议在 5000 ms 左右。

在配网前使用此功能获取设备支持的 Wi-Fi 列表,可以有效提升配网成功率,建议在双模配网场景下优先使用此功能。

错误码

错误码 错误消息 处理建议
DEVICE_WIFI_SCAN_FAILED Wi-Fi 扫描失败 检查设备是否正常工作,可以尝试重新扫描
DEVICE_NOT_SUPPORT 设备不支持该功能 确认设备是否为 TuyaOS v3.10.0 及以上版本
DEVICE_TIMEOUT 获取超时 适当增加 timeout 参数值后重试