前言

由于稳定性、成本等原因,大部分智能家居设备都只支持连接 2.4G 的无线网络。所以我们在利用 APP 实现配网的时候就需要判断 Wi-Fi 是 2.4G、5G,还是 2.4G+5G 双频,也就是大部分智能家居设备是无法连接纯 5G Wi-Fi 的,如果用户手机连接的是纯 5G Wi-Fi 就需要给用户一个提示信息,2.4G+5G 双频则不需要提示。

很多人肯定会想 “这个有什么难的?” 扫描出的 Wi-Fi 结果中肯定有属性可以判断。其实并没有这么简单,我们的测试人员在禅道上提了这个问题,结果我们团队负责这个功能的 Android 和 IOS 两位小伙伴就把这个 bug 在禅道上晾了几个月,他们说确实没什么办法可以直接判断。

我今天没这么忙就想起了这个问题,就想着看看能不能把这个问题解决掉。经过查询资料,确实可以通过扫描的频率(frequency)来判断是 2.4G 还是 5G,但是无法判断出是 2.4G+5G 双频。我就不信了,Google 一顿搜索,发现还真没有解决方案!

经过一个下午的分析后面终于解决了!发现这个问题其实并不难,只是我一开始和其他两个小伙伴一样,由于对 Wi-Fi 频段不熟悉,思维没有转变过来,总是想着通过某个 Wi-Fi 返回的信息来判断是不是 2.4G+5G 双频,这个是行不通的,后面慢慢分析为什么行不通。

一、频段

我们在淘宝上买路由器的时候,经常会搜索到标题包含 双频 的路由器,这里的双频指的是这个路由器可以开两个频段的网络,分别是 2.4GHz 频段和 5GHz 频段。具体区别如下:

  • 2.4GHz 频段
    2.4GHz 频段的网络接入速率为 72M,Wi-Fi 协议对应的是 802.11n。特点是速率低,信道少干扰大,穿墙能力强,覆盖距离远。频率在 2400 到 2500 之间,不包含头尾。
  • 5GHz 频段
    5GHz 频段的网络接入速率是 433M,Wi-Fi 协议对应的是 802.11ac。特点是速率高,信道多干扰小,穿墙能力差,覆盖距离也比较近。频率在 4900 到 5900 之间,不包含头尾。

如果路由器开启了双频合一功能,那么这个路由器就会同时发出 2.4GHz 频段和 5GHz 频段的网络,但是它们在手机上显示的确是同一个 SSID(Wi-Fi 名称),我们连接的时候可能连接的是 2.4GHz 频段,也可能是 5GHz 频段,连接哪个取决于当时的环境、网络状况等原因。

二、代码分析

看到我上面标注的重点了吗?突破口就是这里!双频路由器会 同时 发出两个频段的网络,但是却显示 同一个 SSID(Wi-Fi 名称)。如果这个时候我们路由器设置的 Wi-Fi 名称是 “wildma_wifi”,那么我们手机上就只显示一个该名字的 Wi-Fi,而不会显示两个同名的。

然后我们连接的时候,利用代码打印出来,也是只有一个频率。如下:

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = mWifiManager.connectionInfo
val frequency = wifiInfo.frequency

得到的 frequency 要么在 2400 到 2500 之间,要么就在 4900 到 5900 之间。这样就只能判断 Wi-Fi 是 2.4G 还是 5G,而无法判断出是 2.4G+5G 双频。

所以如果你不了解双频,那么思维就会一直停留在这里,无法得到答案。我们了解双频后,知道双频路由器会 同时 发出两个频段的网络,那么我们就可以遍历扫描到的 Wi-Fi,如果同一个 SSID 的 Wi-Fi 出现两次,并且频率不一样,那么连接的这个 Wi-Fi 就是 2.4G+5G 双频。
代码如下:

class MainActivity : AppCompatActivity() {var mWifiScanResults = HashMap<String, WifiScanResult?>()/*** 处理扫描结果** @param scanResults 扫描结果集合*/private fun handleScanResult(scanResults: List<ScanResult>) {for (i in scanResults.indices) {val scanResult = scanResults[i]val ssid = scanResult.SSIDif (!mWifiScanResults.containsKey(ssid)) {mWifiScanResults[ssid] = WifiScanResult()}mWifiScanResults[ssid]?.setFrequency(scanResult.frequency)}}
}
class WifiScanResult {// 是否是 2.4Gprivate var is24G = false// 是否是 5Gprivate var is5G = false/*** 设置频率** @param frequency 频率*/fun setFrequency(frequency: Int) {if (frequency in 2401..2499) {is24G = true}if (frequency in 4901..5899) {is5G = true}}
}

完整源码:Wifi

三、总结

一个问题可能并不难,但是如果你不了解某个知识点,思维就转变不了,就会一直卡在某个点。

关于我

我是 wildma,CSDN 认证博客专家,简书程序员优秀作者,擅长屏幕适配。
如果文章对你有帮助,点个赞就是对我最大的认可!

Android 如何判断 Wi-Fi 是 2.4G+5G 双频?相关推荐

  1. 2.4gwifi最高下载速度_2.4G+5G双频合一的路由器速度会更快?看完后才知道还好没上当...

    ▲ 点击上方蓝字关注「细猪工作室」 回复独立思考  赠你一段话  伴你成长 高级路由器一般有两个频率,一个无线网络频率2.4G,一个无线网络频率5G,一个WIFI两个信号大部分路由器都具备了,双频路由 ...

  2. 2.4G+5G 双频WIFI SOC物联网模组DT-W5G1

    淘宝购买链接: https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.25911debcAPmYL&ft=t&id=58831 ...

  3. 【解决】向日葵开机插座如何连接2.4G与5G双频合一的WiFi

    文章目录 1. 按 2. 操作步骤 1. 按 向日葵的这款插座只能连接2.4G的WiFi,对2.4G与5G双频合一的WiFi支持不够友好,但却并不是不可以连接双频WiFi,我们只需要根据电磁波的特性与 ...

  4. android环境监测,基于Wi―Fi和Android家居环境监测与实现

    摘 要 为了人们生活环境健康安全,实现家居环境检测,利用现在手持智能设备,设计出一种基于Android的家居检测系统.本文采用了具有Android操作系统的智能手机或平板电脑作为家居设备终端,以STM ...

  5. Redmi Note 10系列细节曝光:有望4G/5G双版本齐发

    昨天,小米POCO X3在欧洲正式发布,起售价199欧元,约合人民币1600元.随后有爆料指出,刚刚发布的小米POCO X3在国内对应的就是连日来频繁曝光的Redmi Note 10系列,不同之处在于 ...

  6. 信驰达推出RTL8720DN系列2.4G和5G双频Wi-Fi+蓝牙二合一模块

    近日,领先的无线物联网通信模块厂商深圳信驰达科技RF-star推出了基于RTL8720DN SoC的2.4 GHz和5 GHz双频Wi-Fi蓝牙二合一模块-RF-WM-20DNB1. 图 1信驰达RF ...

  7. 2.4g和5g要不要合并_请问千兆路由器,2.4g与5g是双频合一还是分开,该选择哪个?...

    虽然很多人的路由器有2.4G和5G这两个频段,但是他们一般使用的是2.4G频段的信号,可能他们不会设置或许他们根本不在意这些.那么,路由器5g和2.4g区别是什么?下面将会为大家介绍. 路由器5g和2 ...

  8. amf组网_【5G核心网】5G核心网SA组网方案及4G/5G互操作探讨

    摘  要: SA(Standalone 独立组网)架构是5G核心网的目标架构.在SA架构下,4G/5G互操作是在核心网实现.本文针对4G/5G核心网互操作,分析了控制面网元整体部署架构.接入层网元组网 ...

  9. 4G/5G频谱资源协同关键技术

    [摘  要]为了使5G与4G的资源更好地协同,整体上发挥资源最大效益,重点分析了4G/5G部署在同一个频段时,如何根据4G和5G的网络负荷,通过载波级动态共享频谱资源的方式实现频谱资源利用率的最大化. ...

最新文章

  1. 全局声明宏定义_Rust语言:元编程,强大的宏系统,菜鸟到高手进阶的必经之路...
  2. centos6.5下的elk部署
  3. 【Django】orm继承AbstractUser表
  4. TCP/IP学习笔记(八)复位报文段
  5. 访问修饰符(C# 编程指南)
  6. Java ObjectInputStream readShort()方法(带示例)
  7. python必备神器_Python 必备神器
  8. Dll注入技术之劫持注入
  9. centos7 删除zabbix_Zabbix服务器端运行中显示为“不”的解决方式
  10. sql中替换逗号为换行符_使用T-SQL将逗号或其他定界符转换为SQL Server中的表或列表
  11. Java 那些最常用的工具类库 | 原力计划
  12. anaconda使用pythonnotebook_anaconda3 notebook for python数据分析-环境搭建
  13. ZOJ 1010. Area 解题报告
  14. 完整制作个人博客系统
  15. 【TJOI 2019】唱、跳、rap和篮球
  16. Tomcat 开启远程监控(JMX)
  17. 创新实训(6)——有关博客的摘要抽取的算法实现(TextRank)
  18. vue开发之图片加载不出来问题解决
  19. matlab标题斜体_Matlab绘图中下标、斜体及希腊字母的使用方法
  20. 历史经验之js个200经验收藏

热门文章

  1. 射频功放学习之HB伽马探针的使用
  2. 轮毂电机光电增量编码器的ABZ信号详解
  3. ikey2032的安装和使用方法
  4. Office PowerPoint 计时器
  5. 拉一塔准则python_学习笔记之Python实现纵横向拉开档次法-研究方法概述
  6. C++核心准则​NR.3:不要拒绝使用异常
  7. PDFlib Adds support for PHP
  8. windows下载编译chromium源码
  9. 移动端选择插件mobiscroll的使用demo
  10. Deal with diffcult people-人与人共事沟通之道