Intereting Posts
Каков самый простой способ получить трассировку стека аварий с Android? Отладчик Android Studio работает, хотя старая версия кода, а не обновлена Как заставить GridView генерировать квадратные ячейки в Android Android AppCompat 23.1.0 Tint Compound Drawable Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout Не удалось создать виртуальную машину Java Оптимальная практика упаковки пакетов Android Android toast не подходит для текста Очередь задач на Android, как в GCD на iOS? Android EditText с отключением TextInputLayout при достижении предела counterMaxLength после обновления библиотеки поддержки 23.2.0 Android использует V8 без WebView Что означает «Ошибка приема трансляции?»? TimeFence.inInterval в API осведомленности не работает Get " connect: уже подключенная" ошибка, если я рисую растровое изображение в качестве фона SurfaceView, а затем воспроизвожу видео Доступ в Realm из неправильного потока Android

Как программно забыть беспроводную сеть в 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(); }