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

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

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

如何解决这个问题?有没有办法忘记所有使用ConnectivityManager或wifimanager的网络?还是任何其他解决方案?


答案 1

是的,有效。我用它来删除所有网络。removeNetwork()

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
    wifiManager.removeNetwork(i.networkId);
    //wifiManager.saveConfiguration();  
}

wifiManager.saveConfiguration()

此方法在 API 级别 26 中已弃用。无需调用此方法 - addNetwork(WifiConfiguration),updateNetwork(WifiConfiguration)和demoveNetwork(int)已经自动保留配置。

https://developer.android.com/reference/android/net/wifi/WifiManager.html#saveConfiguration()


答案 2

源代码,有这样的方法: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()


推荐