我正在为IoT(物联网)项目设计一个应用程序,该应用程序需要各种SSID之间的无缝连接。
App在数据库中存储SSID-pwd对,当一个特定的IoT设备在wifi扫描列表中弹出时,它会自动连接到手机。
我已尝试使用以下代码从我的应用中连接到WiFi。
public boolean ConnectToNetworkWEP( String networkSSID, String password )
{
try {
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain SSID in quotes
conf.wepKeys[0] = password; //WEP password is in hex, we do not need to surround it with quotes.
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
WifiManager wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
Toast.makeText(this, i.SSID, Toast.LENGTH_SHORT).show();
break;
}
}
//WiFi Connection success, return true
return true;
} catch (Exception ex) {
System.out.println(Arrays.toString(ex.getStackTrace()));
return false;
}
}
但它无法可靠地连接到列出的SSID。它似乎取决于手机的本机连接,因为当我将SSID传递给没有密码的方法或提供无效密码时,它仍然连接到给出SSID的网络。 但是当我忘记所有网络时,它无法连接正确的密码。
仍然很疯狂,无论我为给定的SSID传递给WifiManager对象的配置如何,它都会连接到记住配置对象中未提供的电话记忆的SSID。
非常感谢任何帮助。