2012-10-08 42 views
13

Tôi sử dụng mã bên dưới để kết nối với mạng được mã hóa. Tuy nhiên, nếu mạng không an toàn và tôi để trống khóa ("") thì không thành công. Có ai là một ý tưởng làm thế nào để giải quyết điều này? Hơn nữa là nó có thể phát hiện nếu một mạng được mở bằng cách sử dụng ssid/bssid? Hay tôi phải quét bằng bộ lọc?Kết nối để mở WiFi

public void connectToSSID(final String ssid, final String key) { 
    Log.i("wifimaster", "connection to "+ssid); 

    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\""+ssid+"\""; //IMPORTANT! This should be in Quotes!! 
    wc.priority = 40; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 

    wc.preSharedKey = "\""+key+"\""; 
    wc.wepKeys[0] = "\""+key+"\""; //This is the WEP Password 
    wc.wepTxKeyIndex = 0; 

    wc.preSharedKey = "\""+key+"\""; 

    int res = wifiManager.addNetwork(wc); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean es = wifiManager.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es); 
    boolean b = wifiManager.enableNetwork(res, true); 
    Log.d("WifiPreference", "enableNetwork returned " + b); 

    if(b) 
     Toast.makeText(c, c.getString(R.string.connected), Toast.LENGTH_SHORT).show(); 
    else 
     Toast.makeText(c, c.getString(R.string.unconnected), Toast.LENGTH_SHORT).show(); 
} 

Trả lời

12

Sử dụng

wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 

chỉ và nó sẽ làm việc.

xóa tất cả các nhiệm vụ khác thành wc, không cần thiết phải sử dụng chúng cho một nhiệm vụ đơn giản khi kết nối mạng. Bạn không phải là creating mạng, bạn đang kết nối với một mạng existing.

Để biết giải pháp đầy đủ, hãy kiểm tra liên kết này: How do I connect to a specific Wi-Fi network in Android programmatically? Nó có mọi thứ bạn cần biết.

+0

Bạn có bất kỳ mã nào về cách nhận phương thức mã hóa từ * chỉ * số ssid không? – bluewhile

+2

No. Bạn không thể tìm thấy phương thức mã hóa chỉ từ ssid. Bạn phải quét mạng sau đó sử dụng ScanResult để nhận tất cả các mạng khả dụng. Sau đó tìm kiếm mạng của bạn với ssid đã cho và tìm phương thức mã hóa của nó. Đây là một liên kết: http://stackoverflow.com/a/12747455/1117338 và http://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities –

Các vấn đề liên quan