2012-06-21 22 views
19

Estoy trabajando en una aplicación que wifi, donde se le pedirá al usuario que ingrese la contraseña de la red escaneada que selecciona, si el usuario ingresa una contraseña correcta, se conecta y funciona bien. Pero cuando el usuario ingresa una contraseña incorrecta, se agrega una nueva red con ese nombre, y no se autenticará debido a una contraseña incorrecta, y tendrá un estado de problema de autenticación.¿Cómo olvidar una red inalámbrica en Android programáticamente?

Ahora, si el usuario intenta volver a escanear y seleccionar la misma red e ingresa la contraseña correcta, no podrá conectarse aunque la contraseña sea correcta y tendrá el estado desactivado, ya que la conexión anterior aún muestra ese estado de problema de autenticación.

¿Cómo solucionar este problema? ¿Hay alguna manera de olvidar todas las redes usando ConnectivityManager o wifimanager? O cualquier otra solución?

Respuesta

7

El código fuente WifiManager, tiene este método:

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

Pero este método es @hide, por lo que no puede usarlo. Pero de acuerdo con este comentario:

Esta función se utiliza en lugar de una secuencia de removeNetwork() y saveConfiguration()

Usted puede tratar de usar: removeNetwork() y saveConfiguration() lugar.

+0

removeNetwork() soluciono el problema. ¡Muchas gracias! :) – Aadi

3

Puede utilizar el método removeNetwork() para eliminar las conexiones de red redundantes (aunque tengo una duda si van a tener el mismo netId) y luego agregue la conexión recién para evitar el problema que está teniendo.

+2

removeNetwork() Resolvió el problema! mientras configuré config, leí el networkID a una variable, de modo que cuando la red no puede conectarse, lo eliminé usando el mismo id en 'removeNetwork()' :) – Aadi

13

Sí, removeNetwork() funciona. Lo usé para eliminar todas las redes.

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

De esta manera es posible obtener la lista de redes configuradas en una lista, a continuación, realizar de inmediato la eliminación y guardar.

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