以编程方式连接WiFi网络(首次访问SSID)?

4

我想连接第一次的wifi网络(之前没有保存过的)。如果我以前连接过这个wifi,下面的代码可以正常运行并且我可以访问wifi,但是如果我尝试第一次连接,什么都不会发生。为什么会出现这种情况?

String networkSSID = "myssid";
String networkPass = "mypass";
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\"";
conf.preSharedKey = "\""+ networkPass +"\"";

WifiManager wifiManager = (WifiManager)MainActivity.this.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();

        break;
    }
}
1个回答

0
有点晚了,但可能会对其他人有所帮助。 你做错了一点。 你正在添加一个网络(之前没有配置过的那个),然后你尝试连接到一个已经配置好的网络(另一个),两者都具有相同的SSID。 相反,尝试这样做:
netId = wifiManager.addNetwork(conf);
if (netId == -1) {
    netId = //your procedure of getting the netId from wifiManager.getConfiguredNetworks()
}
wifiManager.enableNetwork(netId, true);

在 Kotlin 中,它看起来像这样:
var netId = wifiManager.addNetwork(conf)
if (netId == -1) netId = getExistingNetworkId(ssid)
if (!wifiManager.enableNetwork(netId, true)) {
//Handle failure
}

...
private fun getExistingNetworkId(ssid: String): Int {
    wifiManager.configuredNetworks?.let {
        return it.firstOrNull { it.SSID.trim('"') == ssid.trim('"') }?.networkId ?: -1
    }
    //Unable to find proper NetworkId to connect to
    return -1
}

这应该就足够了。你不需要断开/重新连接部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接