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

前言

由于稳定性、成本等原因,大部分智能家居设备都只支持连接 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.SSID
            if (!mWifiScanResults.containsKey(ssid)) {
                mWifiScanResults[ssid] = WifiScanResult()
            }
            mWifiScanResults[ssid]?.setFrequency(scanResult.frequency)
        }
    }
}
class WifiScanResult {
    // 是否是 2.4G
    private var is24G = false

    // 是否是 5G
    private var is5G = false

    /**
     * 设置频率
     *
     * @param frequency 频率
     */
    fun setFrequency(frequency: Int) {
        if (frequency in 2401..2499) {
            is24G = true
        }
        if (frequency in 4901..5899) {
            is5G = true
        }
    }
}

完整源码:Wifi

三、总结

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

关于我

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容