Как программно забыть беспроводную сеть в android?

Я работаю над приложением wifi, где пользователю будет предложено ввести пароль для отсканированной сети, которую он выбирает, если пользователь вводит правильный пароль, он подключается и работает хорошо. Но когда пользователь вводит неверный пароль, новая сеть добавляется с этим именем и не будет аутентифицироваться по причине неправильного пароля и будет иметь статус проверки подлинности.

Теперь, если пользователь попытается снова проверить и выбрать одну и ту же сеть и ввести правильный пароль, он не сможет подключиться, даже если пароль теперь правильный и будет отключен, поскольку предыдущее соединение все еще показывает статус проверки подлинности.

Как решить эту проблему? Есть ли способ забыть обо всех сетях, используя ConnectivityManager или wifimanager? Или любое другое решение?

Исходный код 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() .

Да, removeNetwork() работает. Я использовал это, чтобы удалить все сети.

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

Вы можете использовать метод removeNetwork() для удаления избыточных сетевых подключений (хотя у меня есть сомнения, что они будут иметь тот же netId ), а затем снова добавьте соединение, чтобы избежать проблемы, с которой вы netId .

Поступая таким образом, можно получить список сетей, настроенных в списке, а затем немедленно выполнить удаление и сохранить.

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