How to forget a wireless network in android programmatically?

落爺英雄遲暮 提交于 2019-11-28 17:54:30
idiottiger

The WifiManager source code, has this method:

/*
 * 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);
}

But this method is @hide, so we can't use it. But according to this comment:

This function is used instead of a sequence of removeNetwork() and saveConfiguration()

You can try to use: removeNetwork() and saveConfiguration() instead.

Yes, removeNetwork() works. I used this to remove all networks.

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

wifiManager.saveConfiguration()

This method was deprecated in API level 26. There is no need to call this method - addNetwork(WifiConfiguration), updateNetwork(WifiConfiguration) and removeNetwork(int) already persist the configurations automatically.

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

You can use the removeNetwork() method to remove the redundant network connections(though I have a doubt if they will have the same netId) and then add the connection freshly to avoid the problem you are having.

wifiManager.saveConfiguration(); 

is deprectated in Android M. No longer need to call saveConfiguration as removeNetwork(int) already persist the configurations automatically.

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

By doing this it is possible to get the list of networks configured in a list, then immediately perform the deletion and save.

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

you need the especific permission.

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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!