Jak programowo zapomnieć o sieci bezprzewodowej w Androidzie?
Pracuję nad aplikacją, która wifi, gdzie użytkownik zostanie poproszony o podanie hasła do zeskanowanej sieci, którą wybiera, jeśli użytkownik wprowadzi poprawne hasło, łączy się i działa dobrze. Ale gdy użytkownik wprowadzi błędne hasło, nowa sieć zostanie dodana o tej nazwie i nie uda się uwierzytelnić z powodu niewłaściwego hasła, a to będzie miało status problemu z uwierzytelnieniem.
Teraz, jeśli użytkownik spróbuje ponownie skanować i wybrać tę samą sieć i wprowadzić poprawne hasło, nie połączy się nawet jeśli hasło jest poprawne i będzie miało status wyłączony, ponieważ poprzednie połączenie nadal pokazuje ten status problemu z uwierzytelnianiem.
Jak rozwiązać ten problem? Czy jest jakiś sposób, aby zapomnieć o wszystkich sieciach za pomocą Connectitymanager lub wifimanager? Albo jakieś inne rozwiązanie?
6 answers
Kod źródłowy WifiManager
, ma taką metodę:
/*
* 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);
}
Ale ta metoda jest @hide
, więc nie możemy jej użyć. Ale zgodnie z tym komentarzem:
Funkcja ta jest używana zamiast ciągu
removeNetwork()
isaveConfiguration()
Możesz spróbować użyć zamiast tego: removeNetwork()
i saveConfiguration()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 18:22:25
Tak, działa. Użyłem tego do usunięcia wszystkich sieci.
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
wifiManager.removeNetwork(i.networkId);
//wifiManager.saveConfiguration();
}
WifiManager.saveConfiguration()
Ta metoda była przestarzała w API na poziomie 26. Nie ma potrzeby dzwonić ta metoda-addNetwork (WifiConfiguration), updateNetwork (WifiConfiguration) i removeNetwork (int) już trwają konfiguracje automatycznie.
Https://developer.android.com/reference/android/net/wifi/WifiManager.html#saveConfiguration()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 11:38:32
Możesz użyć removeNetwork()
metoda usuwania nadmiarowych połączeń sieciowych (choć mam wątpliwości, czy będą one miały to samo netId
), a następnie dodać połączenie świeżo, aby uniknąć problemu, który masz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-21 08:40:26
wifiManager.saveConfiguration();
Jest przestarzały w Androidzie M. nie trzeba już wywoływać saveConfiguration, ponieważ removeNetwork (int)automatycznie zapisuje konfiguracje.
Https://developer.android.com/reference/android/net/wifi/WifiManager.html#saveConfiguration()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 13:46:23
W ten sposób możliwe jest uzyskanie listy sieci skonfigurowanych na liście, a następnie natychmiastowe usunięcie i zapisanie.
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
wifiManager.removeNetwork(i.networkId);
wifiManager.saveConfiguration();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-15 14:57:39
Potrzebujesz specjalnego pozwolenia.
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);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-17 21:21:50