最近開發wifi方面的功能,需要根據wifi加密類型來展現UI。遇到了一個比較蛋疼的問題:如何判斷wifi加密類型
- wifi的管理需要通過
WifiManager
來操作
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
- 開啟和關閉wifi
mWifiManager.setWifiEnabled(enabled);
- 掃描wifi列表
List<ScanResult> scanResults= mWifiManager.getScanResults();
前面這幾步非常簡單,現在問題來了,數據已經拿到,那么如何判斷吶?
wifi的加密類型是通過ScanResult
對象的capabilities
字段來獲取的,先看下官方的介紹:
注釋里解釋這個字段
Describes the authentication, key management, and encryption schemes supported by the access point.
描述了認證、密鑰管理、接入點所支持的加密方案。
并沒有提供如何區分加密類型的標準,通過搜索,網上的判斷方法多數是這么寫的
if (capabilities.contains("WEP")) {
...
} else if (capabilities.contains("PSK")) {
...
} else if (capabilities.contains("EAP")) {
...
} else {
//不加密
}
由于自己的電腦開啟wifi熱點有些問題,只是拿了兩部手機和小米隨身wifi進行測試,獲取的capabilities
字段的值如下:
//一些加密wifi獲取的值
[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]
[WPA2-PSK-CCMP][WPS][ESS]
[WPA2-PSK-CCMP][ESS]
//Android手機(魅族和小米)共享的不加密wifi獲取的值
[WPS][ESS]
//小米隨身wifi(usb硬件)共享的不加密wifi獲取的值
[ESS]
用上面的判斷方法來匹配加密類型貌似沒有問題,個人感覺這不是一個很好的解決方案。不加密的情況,這里僅僅測試了兩部Android手機和小米隨身wifi,就出現了不同的值,會不會出現其它的值?這是個疑問。如果您有更好的方法,歡迎指正!
參考鏈接
http://stackoverflow.com/questions/11956874/scanresult-capabilities-interpretation
http://stackoverflow.com/questions/10762533/constructing-a-wificonfiguration-from-a-scanresult-or-interpreting-scanresults