wifi를 검색하는 방법에 대해서는 이전 글에서 알아보았다.
wifi에 연결하기 위해서는 보안방식과 비밀번호, ssid가 필요한데
보안방식과 ssid는 이전글의 ScanResult에서 뽑아낼 수가 있다.
비밀번호를 모르면 당연히 보안이 걸려있는 wifi에는 연결이 불가능.
일단 소스를 살펴보자
open일때
wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wfc.allowedAuthAlgorithms.clear();
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wep일때
wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wfc.wepKeys[0] = "123456abcd"; <<--이부분중요. \"부분 빼고 그냥 비밀번호만 넣는다
wfc.wepTxKeyIndex = 0;
wpa나 wpa2일때
wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wfc.preSharedKey = "\"".concat("123456abcd").concat("\"");
이렇게 보안방식별로 설정 방법이 다르다.
wpa와 wpa2는 설정이 같다고 하는데 필자의경우 wpa방식은 연결이 안되더라.
실제 테스트해본건 wpa2와 wep, open밖에 없다.
참고로 ScanResult.capabilites에서 뱉어주는 보안방식이 실제 open, web, wpa로 나오는건 아니고
[WPA-PSK-TKIP+CCMP][ESS]
[WPA2-PSK-CCMP][WPS][ESS] 이런식이며, 같은 방식도 length가 다른경우가 있다.
이부분은 알아서 잘 처리해주리라 믿고,
먼저 공통설정을
WifiConfiguration wfc = new WifiConfiguration(); (WifiConfiguration는 전역변수,지역변수 알아서 상황에 맞게 조절한다)
wfc = new WifiConfiguration();
wfc.SSID = "\"".concat(ssid 입력).concat("\"");
wfc.status = WifiConfiguration.Status.DISABLED;
wfc.priority = 40;
이렇게 해준다.
그리고 위의 보안방식에 따른 설정을 해 주고,
int networkId = wm.addNetwork(wfc);
if (networkId != -1) {
wm.enableNetwork(networkId, true);
}
이렇게 해주면 해당하는 wifi에 연결이 완료된다.
open형의 경우에는 level(신호세기)에 따라 정렬을 해 주고, 위의 소스를 적용시키면 가장 신호가 센놈으로
자동으로 연결될듯하다.
-끝-