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();
}
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
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 –