如何以编程方式忘记android中的无线网络?


问题内容

我正在开发一个wifi应用程序,在该应用程序中,将要求用户输入他选择的扫描网络的密码,如果用户输入正确的密码,它将连接并正常运行。但是,当用户输入错误的密码时,将使用该名称添加新的网络,并且将无法对错误密码的cos进行身份验证,并且网络将具有身份验证问题状态。

现在,如果用户尝试再次扫描并选择相同的网络,并输入正确的密码,即使密码现在正确并且将处于禁用状态,它也将无法连接,因为先前的连接仍显示该身份验证问题状态。

如何解决这个问题呢?有什么方法可以使用ConnectivityManager或wifimanager忘记所有网络吗?或其他解决方案?


问题答案:

WifiManager源代码,有这样的方法:

/*
 * Delete the network in the supplicant config.
 *
 * This function is used instead of a sequence of removeNetwork()
 * and saveConfiguration().
 *
 * @param config the set of variables that describe the configuration,
 *            contained in a {@link WifiConfiguration} object.
 * @hide
 */

public void forgetNetwork(int netId) {
    if (netId < 0) {
        return;
    }
    mAsyncChannel.sendMessage(CMD_FORGET_NETWORK, netId);
}

但是此方法是@hide,因此我们无法使用它。但根据此评论:

该功能用于序列而不是removeNetwork()saveConfiguration()

您可以尝试使用:removeNetwork()saveConfiguration()