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

时间:2012-06-21 08:33:53

标签: java android android-wifi android-internet android-wireless

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

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

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

6 个答案:

答案 0 :(得分:21)

是的,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()

答案 1 :(得分:11)

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()和{{1}}代替。

答案 2 :(得分:3)

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

答案 3 :(得分:1)

wifiManager.saveConfiguration(); 
在Android M中删除了

。不再需要调用saveConfiguration,因为removeNetwork(int)已经自动保留配置。

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

答案 4 :(得分:0)

通过执行此操作,可以获取列表中配置的网络列表,然后立即执行删除并保存。

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            wifiManager.removeNetwork(i.networkId);
            wifiManager.saveConfiguration();
        }

答案 5 :(得分: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);