Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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