最近開發(fā)wifi方面的功能,需要根據(jù)wifi加密類型來展現(xiàn)UI。遇到了一個比較蛋疼的問題:如何判斷wifi加密類型
- wifi的管理需要通過
WifiManager來操作
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
- 開啟和關(guān)閉wifi
mWifiManager.setWifiEnabled(enabled);
- 掃描wifi列表
List<ScanResult> scanResults= mWifiManager.getScanResults();
前面這幾步非常簡單,現(xiàn)在問題來了,數(shù)據(jù)已經(jīng)拿到,那么如何判斷吶?
wifi的加密類型是通過ScanResult 對象的capabilities字段來獲取的,先看下官方的介紹:

注釋里解釋這個字段
Describes the authentication, key management, and encryption schemes supported by the access point.
描述了認(rèn)證、密鑰管理、接入點所支持的加密方案。
并沒有提供如何區(qū)分加密類型的標(biāo)準(zhǔn),通過搜索,網(wǎng)上的判斷方法多數(shù)是這么寫的
if (capabilities.contains("WEP")) {
...
} else if (capabilities.contains("PSK")) {
...
} else if (capabilities.contains("EAP")) {
...
} else {
//不加密
}
由于自己的電腦開啟wifi熱點有些問題,只是拿了兩部手機(jī)和小米隨身wifi進(jìn)行測試,獲取的capabilities字段的值如下:
//一些加密wifi獲取的值
[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
[WPA2-PSK-CCMP][WPS][ESS]
[WPA2-PSK-CCMP][ESS]
//Android手機(jī)(魅族和小米)共享的不加密wifi獲取的值
[WPS][ESS]
//小米隨身wifi(usb硬件)共享的不加密wifi獲取的值
[ESS]
用上面的判斷方法來匹配加密類型貌似沒有問題,個人感覺這不是一個很好的解決方案。不加密的情況,這里僅僅測試了兩部Android手機(jī)和小米隨身wifi,就出現(xiàn)了不同的值,會不會出現(xiàn)其它的值?這是個疑問。如果您有更好的方法,歡迎指正!
參考鏈接
http://stackoverflow.com/questions/11956874/scanresult-capabilities-interpretation
http://stackoverflow.com/questions/10762533/constructing-a-wificonfiguration-from-a-scanresult-or-interpreting-scanresults