19

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

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

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

ответ

7

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() вместо этого.

+0

removeNetwork() решить эту проблему. Большое спасибо! :) – Aadi

3

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

+2

removeNetwork() решена проблема! в то время как, настроив конфигурацию, я считываю идентификатор сети в переменную, так что, когда сеть не удается подключиться, я удалил ее с использованием того же идентификатора в 'removeNetwork()' :) – Aadi

13

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

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

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

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