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

Ada*_*H S 24 java android android-wifi android-wireless android-internet

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

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

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

kri*_*nan 22

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

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

wifiManager.saveConfiguration()

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

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


idi*_*ger 13

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);
}
Run Code Online (Sandbox Code Playgroud)

但这种方法是@hide,所以我们不能使用它.但根据这个评论:

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

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