【问题标题】:Connect to wifi network programmatically(first access ssid)?以编程方式连接到 wifi 网络(首先访问 ssid)?
【发布时间】:2017-02-15 14:52:09
【问题描述】:

我想连接第一次 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;
    }
}

【问题讨论】:

    标签: java android android-studio networking wifimanager


    【解决方案1】:

    有点晚了,但它可能对其他人有所帮助。 你,有点,做错了。 您正在添加一个网络(之前未配置的网络),然后您尝试连接到已配置的网络(不同的网络),两者都具有相同的 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
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2013-03-26
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多