2012-07-07 2 views
0

WifiManager를 사용하여 특정 SSID의 존재 여부를 테스트하고 주어진 WPA 암호를 확인했지만 이상한 결과가 나타납니다.Android WifiManager에서 팬텀 연결을하고 있습니까?

코드는 다음과 같습니다

WifiConfiguration wc = new WifiConfiguration(); 

// init ssid and password as Strings ... 
wc.SSID = "\"" + ssid + "\""; 
wc2.preSharedKey = "\"" + password + "\""; 

wc.hiddenSSID = true; 
wc.status = WifiConfiguration.Status.ENABLED; 
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 

int res = wifi.addNetwork(wc); 
boolean b = wifi.enableNetwork(res, true); 

이상한 부분은 enableNetwork()가 SSID를 가진 무선 랜 네트워크가 온라인 상태가 아닌 경우에도 true를 반환한다는 것입니다 (?!). 그러나 대상 Wifi 네트워크가 있고 암호가 맞으면 코드가 성공적으로 연결합니다.

Android 설명서에 따르면 enableNetwork()는 "작업이 성공하면 true를 반환합니다." 내 질문은 다음과 같습니다.

1) 네트워크가 활성화되지 않은 경우 어떻게 활성화 할 수 있습니까?

2) WifiConfiguration 매개 변수 인 wc를 잘못 초기화 했습니까?

3) Wi-Fi 네트워크 연결을 테스트하는 올바른 방법입니까?

답변

3

1) 네트워크가 활성화되지 않은 경우 어떻게 활성화 할 수 있습니까?

Android 설명서에 따르면 enableNetwork()는 "작업이 성공하면 true를 반환합니다."

실제로 활성화 작동이 성공적으로 시작되었으며 충돌하지 않았 음을 나타냅니다. wifi 인스턴스가 더 이상 wifi 요청자와 연결되어 있지 않으면 false를 반환 할 수 있습니다.

2) WifiConfiguration 매개 변수 인 wc를 잘못 초기화 했습니까?

확실하지 않지만 괜찮아 보입니다.

3)이 방법은 Wi-Fi 네트워크 연결을 설정/테스트하는 올바른 방법입니까? 네트워크가 startScan() 방법을 사용하여 실제로 사용할 수있는 경우

네트워크를 사용하기 전에, 당신은 확인해야합니다. (콜백에 SSID 목록이 표시됩니다).

또한 BroadcastReceiver를 사용하여 의도 지점 NETWORK_STATE_CHANGED_ACTION에서 결과를 얻고 액세스 지점에 대한 연결이 성공했는지 확인할 수 있습니다.