2011-11-25 101 views
2

我正在開發一個應用程序,它應該自動和定期啓用wifi,掃描網絡,過濾掉打開的網絡(不需要傳遞),創建wifi配置對象並使用它連接到該網絡。如何以編程方式掃描,查找並連接到開放式WiFi AP?

我讀了android開發人員的wifiConfiguration API。並在此基礎上我寫的代碼樣本,其不啓用WiFi,支持網絡掃描,並將結果保存在它看起來像一個列表:

11-25 16:05:44.191: I/WIFISCAN(12955): List of networks: [SSID: airlive_w, BSSID: 00:4f:62:2c:96:18, capabilities: [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS], level: -71, frequency: 2432, SSID: Mikynet, BSSID: 00:1e:2a:ed:62:4e, capabilities: [WPA2-PSK-CCMP], level: -72, frequency: 2427, SSID: TP-LINK_Vectra, BSSID: 74:ea:3a:ab:eb:b0, capabilities: [WPA2-PSK-TKIP+CCMP][WPS], level: -73, frequency: 2462, SSID: Nasza Siec- ryby, BSSID: d8:5d:4c:df:60:74, capabilities: [WPA2-PSK-TKIP+CCMP-preauth], level: -88, frequency: 2437, SSID: lanzarote, BSSID: 00:27:19:f7:05:9c, capabilities: [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP-preauth], level: -89, frequency: 2437, SSID: Alicja, BSSID: 94:44:52:a7:17:02, capabilities: [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS], level: -89, frequency: 2442, SSID: orangebox, BSSID: 00:1f:f3:f8:ea:0f, capabilities: [WPA2-PSK-CCMP], level: -89, frequency: 2462] 

有了這樣的結果,我應該如何去知道哪些他們是開放的(通過免費)? 我如何爲一個開放的WiFiConfiguration創建?

這裏是一個WPA-PSK的樣本wifiConfiguration:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
// This is must be quoted according to the documentation 
// http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID 
wc.SSID = "\"SSIDName\""; 
wc.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); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean b = wifi.enableNetwork(res, true);   
Log.d("WifiPreference", "enableNetwork returned " + b); 

任何指導,將高度apreciated! :)

回答

2

從我可以告訴,你可能必須嘗試添加一個開放的配置到Wifi服務。如果添加開放式網絡失敗,則可能需要某種身份驗證協議。

WifiConfiguration wc = new WifiConfiguration(); 
wc.SSID = "some ssid from the list"; 
wc.status = WifiConfiguration.Status.ENABLED; 
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
int networkId = wifi.addNetwork(wc); 
if (networkId == -1) { 
    // probably not open 
} else { 
    // likely open 
} 

你也可以結合使用這與getConfiguredNetworks方法,看是否有附近的網絡一)此前已連接到和b)是開放的。

+0

這個例子對我來說有開放性和網絡使用密碼返回「可能打開」。 – garmax1

相關問題