2012-06-21 15 views
19

Sto lavorando a un'app quale wifi, dove all'utente verrà chiesto di inserire la password per la rete scansionata che seleziona, se l'utente immette una password corretta, si connette e funziona bene. Ma quando l'utente immette una password errata, viene aggiunta una nuova rete con quel nome e non riuscirà ad autenticare cos di una password errata e avrà lo stato di problema di autenticazione.Come dimenticare una rete wireless in Android a livello di programmazione?

Ora, se l'utente tenta di eseguire nuovamente la scansione e selezionare la stessa rete e inserisce la password corretta, non riesce a connettersi anche se la password ora è corretta e lo stato disabilitato, poiché la connessione precedente mostra ancora lo stato del problema di autenticazione.

Come risolvere questo problema? C'è un modo per dimenticare tutte le reti usando ConnectivityManager o wifimanager? O qualsiasi altra soluzione?

risposta

7

Il codice sorgente di WifiManager, ha questo metodo:

/* 
* 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); 
} 

Ma questo metodo è @hide, quindi non possiamo usarlo. Ma secondo questo commento:

Questa funzione viene utilizzata al posto di una sequenza di removeNetwork() e saveConfiguration()

Si può provare a utilizzare: removeNetwork() e saveConfiguration() invece.

+0

removeNetwork() risolve il problema. Grazie molto! :) – Aadi

3

È possibile utilizzare il metodo removeNetwork() per rimuovere le connessioni di rete ridondanti (anche se ho il dubbio che abbiano lo stesso netId) e quindi aggiungere la connessione di recente per evitare il problema riscontrato.

+2

removeNetwork() ha risolto il problema! mentre, configurando la configurazione, leggo il networkID su una variabile, in modo che quando la rete non riesce a connettersi, l'ho rimosso usando lo stesso id in 'removeNetwork()' :) – Aadi

13

Sì, removeNetwork() funziona. L'ho usato per rimuovere tutte le reti.

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

In questo modo è possibile ottenere la lista delle reti configurate in un elenco, quindi eseguire subito l'eliminazione e salvataggio.

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