28

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

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

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

4

6 回答 6

25

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

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

wifiManager.saveConfiguration()

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

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

于 2015-07-17T14:17:45.320 回答
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);
}

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

使用此函数代替removeNetwork()and 的序列saveConfiguration()

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

于 2012-06-21T08:45:33.260 回答
3

您可以使用该removeNetwork()方法删除冗余网络连接(尽管我怀疑它们是否具有相同netId的连接),然后重新添加连接以避免您遇到的问题。

于 2012-06-21T08:40:26.123 回答
1
wifiManager.saveConfiguration(); 

在 Android M 中已弃用。不再需要调用 saveConfiguration,因为 removeNetwork(int) 已经自动持久化配置。

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

于 2017-10-10T13:46:23.773 回答
0

通过这样做,可以获得列表中配置的网络列表,然后立即执行删除并保存。

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            wifiManager.removeNetwork(i.networkId);
            wifiManager.saveConfiguration();
        }
于 2017-05-15T14:57:39.747 回答
0

您需要特定的权限。

final int numOpenNetworksKept = Build.VERSION.SDK_INT >= 17
                ? Settings.Secure.getInt(resolver, Settings.Global.WIFI_NUM_OPEN_NETWORKS_KEPT, 10)
                : Settings.Secure.getInt(resolver, Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, 10);
于 2018-05-17T21:21:50.730 回答