智能家具实现Wifi连接和TCP简单通信,解决Wifi版本适配,连接没有网络的WIfi自动断开的问题

本文介绍了智能家具如何实现连接指定WiFi,并通过TCP进行简单通信。首先,详细讲解了如何配置并连接具有特定格式的WiFi;接着,注册广播监听以跟踪WiFi状态变化和连接状况;最后,利用Socket发送消息,确保在WiFi无网络时能自动断开连接,提高系统稳定性。
摘要由CSDN通过智能技术生成

目录

 

第一步:连接指定WIFI

第二步:注册广播监听Wifi变更和连接状态

第三步:使用Socket发送消息


第一步:连接指定WIFI

连接硬件设备暴露出来的Wifi,Wifi名称都应该有规定的格式。

连接指定Wifi前,自己需要组装好 WifiConfiguration

//WIFI密码类型
const val WIFICIPHER_WPA = 0
const val WIFICIPHER_WEP = 1
const val WIFICIPHER_NOPASS = 2

/**
 * 创建新的WIFI连接对象 WifiConfiguration
 * type Wifi的密码类型 
*/
fun createWifiInfo(SSID: String, password: String,
                           type: Int) : WifiConfiguration{
    val config = WifiConfiguration()
    config.allowedAuthAlgorithms.clear()
    config.allowedGroupCiphers.clear()
    config.allowedKeyManagement.clear()
    config.allowedPairwiseCiphers.clear()
    config.allowedProtocols.clear()
    config.SSID = "\"" + SSID + "\""
    when (type) {
        Constant.WIFICIPHER_NOPASS -> {
            config.wepKeys[0] = "\"" + "\""
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
            config.wepTxKeyIndex = 0
        }
        Constant.WIFICIPHER_WEP -> {
            config.preSharedKey = "\"" + password + "\""
            config.hiddenSSID = true
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.SHARED)
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.CCMP)
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.TKIP)
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.WEP40)
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.WEP104)
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
            config.wepTxKeyIndex = 0
        }
        Constant.WIFICIPHER_WPA -> {
            config.preSharedKey = "\"" + password + "\""
            config.hiddenSSID = true
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.OPEN)
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.TKIP)
            config.allowedKeyManagement
                    .set(WifiConfiguration.KeyMgmt.WPA_PSK)
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.TKIP)
            // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.CCMP)
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.CCMP)
            config.status = WifiConfiguration.Status.ENABLED
        }
    }
    return config
}
使用config连接Wifi
/**
 * 连接指定Wifi
 */
private fun connectWifi(name: String, config: WifiConfiguration) {
//判断当前系统是否已经缓存有和 name相同的wifi
    var isCon = false
//遍历当前系统所有保存的Wifi
    val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
    for (c in wifiManager.configuredNetworks) {
//注意这里名字里面还有""
        if (c.SSID.toString() == "\"$name\"") {
            isCon = true
//如果有保存过的wifi,直接调用连接
            WiFiUtil().connectWifiByReflectMethod(c.networkId, wifiManager, config)
        }
    }
    if (!isCon) {
//如果没有需要自己构建config连接wifi
        connect(config)
    }
}
/**
 * 连接自己创建的Wifi
 */
private fun connect(config: WifiConfiguration) {
    //获取构建好的WifiConfig的ID
    val wcgID = wifiManager.addNetwork(config)
    //重点。使用反射调用各版本系
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值