Android 如何判斷 Wi-Fi 是 2.4G+5G 雙頻?

前言

由于穩(wěn)定性均澳、成本等原因涎劈,大部分智能家居設(shè)備都只支持連接 2.4G 的無線網(wǎng)絡(luò)。所以我們?cè)诶?APP 實(shí)現(xiàn)配網(wǎng)的時(shí)候就需要判斷 Wi-Fi 是 2.4G奶躯、5G,還是 2.4G+5G 雙頻,也就是大部分智能家居設(shè)備是無法連接純 5G Wi-Fi 的督笆,如果用戶手機(jī)連接的是純 5G Wi-Fi 就需要給用戶一個(gè)提示信息,2.4G+5G 雙頻則不需要提示诱贿。

很多人肯定會(huì)想 “這個(gè)有什么難的娃肿?” 掃描出的 Wi-Fi 結(jié)果中肯定有屬性可以判斷。其實(shí)并沒有這么簡單珠十,我們的測試人員在禪道上提了這個(gè)問題料扰,結(jié)果我們團(tuán)隊(duì)負(fù)責(zé)這個(gè)功能的 Android 和 IOS 兩位小伙伴就把這個(gè) bug 在禪道上晾了幾個(gè)月,他們說確實(shí)沒什么辦法可以直接判斷焙蹭。

我今天沒這么忙就想起了這個(gè)問題晒杈,就想著看看能不能把這個(gè)問題解決掉。經(jīng)過查詢資料孔厉,確實(shí)可以通過掃描的頻率(frequency)來判斷是 2.4G 還是 5G拯钻,但是無法判斷出是 2.4G+5G 雙頻。我就不信了撰豺,Google 一頓搜索粪般,發(fā)現(xiàn)還真沒有解決方案!

經(jīng)過一個(gè)下午的分析后面終于解決了污桦!發(fā)現(xiàn)這個(gè)問題其實(shí)并不難亩歹,只是我一開始和其他兩個(gè)小伙伴一樣,由于對(duì) Wi-Fi 頻段不熟悉,思維沒有轉(zhuǎn)變過來捆憎,總是想著通過某個(gè) Wi-Fi 返回的信息來判斷是不是 2.4G+5G 雙頻舅柜,這個(gè)是行不通的,后面慢慢分析為什么行不通躲惰。

一致份、頻段

我們?cè)谔詫毶腺I路由器的時(shí)候,經(jīng)常會(huì)搜索到標(biāo)題包含 雙頻 的路由器础拨,這里的雙頻指的是這個(gè)路由器可以開兩個(gè)頻段的網(wǎng)絡(luò)氮块,分別是 2.4GHz 頻段和 5GHz 頻段。具體區(qū)別如下:

  • 2.4GHz 頻段
    2.4GHz 頻段的網(wǎng)絡(luò)接入速率為 72M诡宗,Wi-Fi 協(xié)議對(duì)應(yīng)的是 802.11n滔蝉。特點(diǎn)是速率低,信道少干擾大塔沃,穿墻能力強(qiáng)蝠引,覆蓋距離遠(yuǎn)。頻率在 2400 到 2500 之間蛀柴,不包含頭尾螃概。
  • 5GHz 頻段
    5GHz 頻段的網(wǎng)絡(luò)接入速率是 433M,Wi-Fi 協(xié)議對(duì)應(yīng)的是 802.11ac鸽疾。特點(diǎn)是速率高吊洼,信道多干擾小,穿墻能力差制肮,覆蓋距離也比較近冒窍。頻率在 4900 到 5900 之間,不包含頭尾豺鼻。

如果路由器開啟了雙頻合一功能综液,那么這個(gè)路由器就會(huì)同時(shí)發(fā)出 2.4GHz 頻段和 5GHz 頻段的網(wǎng)絡(luò),但是它們?cè)谑謾C(jī)上顯示的確是同一個(gè) SSID(Wi-Fi 名稱)拘领,我們連接的時(shí)候可能連接的是 2.4GHz 頻段意乓,也可能是 5GHz 頻段樱调,連接哪個(gè)取決于當(dāng)時(shí)的環(huán)境约素、網(wǎng)絡(luò)狀況等原因。

二笆凌、代碼分析

看到我上面標(biāo)注的重點(diǎn)了嗎圣猎?突破口就是這里!雙頻路由器會(huì) 同時(shí) 發(fā)出兩個(gè)頻段的網(wǎng)絡(luò)乞而,但是卻顯示 同一個(gè) SSID(Wi-Fi 名稱)送悔。如果這個(gè)時(shí)候我們路由器設(shè)置的 Wi-Fi 名稱是 “wildma_wifi”,那么我們手機(jī)上就只顯示一個(gè)該名字的 Wi-Fi,而不會(huì)顯示兩個(gè)同名的欠啤。

然后我們連接的時(shí)候荚藻,利用代碼打印出來,也是只有一個(gè)頻率洁段。如下:

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 雙頻疾呻。

所以如果你不了解雙頻,那么思維就會(huì)一直停留在這里写半,無法得到答案岸蜗。我們了解雙頻后,知道雙頻路由器會(huì) 同時(shí) 發(fā)出兩個(gè)頻段的網(wǎng)絡(luò)叠蝇,那么我們就可以遍歷掃描到的 Wi-Fi璃岳,如果同一個(gè) SSID 的 Wi-Fi 出現(xiàn)兩次,并且頻率不一樣悔捶,那么連接的這個(gè) Wi-Fi 就是 2.4G+5G 雙頻矾睦。
代碼如下:

class MainActivity : AppCompatActivity() {

    var mWifiScanResults = HashMap<String, WifiScanResult?>()

    /**
     * 處理掃描結(jié)果
     *
     * @param scanResults 掃描結(jié)果集合
     */
    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

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

完整源碼:Wifi

三、總結(jié)

一個(gè)問題可能并不難炎功,但是如果你不了解某個(gè)知識(shí)點(diǎn)枚冗,思維就轉(zhuǎn)變不了,就會(huì)一直卡在某個(gè)點(diǎn)蛇损。

關(guān)于我

我是 wildma赁温,CSDN 認(rèn)證博客專家簡書程序員優(yōu)秀作者淤齐,擅長屏幕適配股囊。
如果文章對(duì)你有幫助,點(diǎn)個(gè)贊就是對(duì)我最大的認(rèn)可更啄!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稚疹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子祭务,更是在濱河造成了極大的恐慌内狗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义锥,死亡現(xiàn)場離奇詭異柳沙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拌倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門赂鲤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來噪径,“玉大人,你說我怎么就攤上這事数初≌野” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵泡孩,是天一觀的道長缴允。 經(jīng)常有香客問我,道長珍德,這世上最難降的妖魔是什么练般? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮锈候,結(jié)果婚禮上薄料,老公的妹妹穿的比我還像新娘。我一直安慰自己泵琳,他們只是感情好摄职,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著获列,像睡著了一般谷市。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上击孩,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天迫悠,我揣著相機(jī)與錄音,去河邊找鬼巩梢。 笑死创泄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括蝠。 我是一名探鬼主播鞠抑,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼忌警!你這毒婦竟也來了搁拙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤法绵,失蹤者是張志新(化名)和其女友劉穎箕速,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礼烈,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弧满,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了此熬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖犀忱,靈堂內(nèi)的尸體忽然破棺而出募谎,到底是詐尸還是另有隱情,我是刑警寧澤阴汇,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布数冬,位于F島的核電站,受9級(jí)特大地震影響搀庶,放射性物質(zhì)發(fā)生泄漏拐纱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一哥倔、第九天 我趴在偏房一處隱蔽的房頂上張望秸架。 院中可真熱鬧,春花似錦咆蒿、人聲如沸东抹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缭黔。三九已至,卻和暖如春蒂破,著一層夾襖步出監(jiān)牢的瞬間馏谨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工附迷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留田巴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓挟秤,卻偏偏與公主長得像壹哺,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子艘刚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容