2017-04-08 1 views
0

Je suis en train d'apprendre à propos de WifiManager, les API de WifiConfiguration.
Ce que j'essaie de réaliser, c'est que je veux me connecter à un réseau spécifique.
C'est ma principale tâche de connexion à un RESEAU SPECIFIQUE, cependant si mon appareil est déjà connecté à un autre réseau, je veux passer du réseau à mon RÉSEAU SPÉCIFIQUE.
Voici l'extraitComment passer d'un réseau wifi à un autre en android

int networkId ; 
    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "ABCDEFG"; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); 


    Log.d("Rohit", "Adding wifi config"); 

    networkId = wifiManager.addNetwork(wc); 

    Log.d("Rohit", "Config added\ndisconnecting\nid = "+networkId); 

    wifiManager.disconnect(); 

    Log.d("Rohit", "Disconnected\nNetwork enabling"); 

    wifiManager.enableNetwork(networkId, true); 

    Log.d("Rohit", "enabled\n reconnecting...."); 

    wifiManager.reconnect(); 

    Log.d("Rohit","connected"); 

Voici la sortie débogué

04-08 19: 57: 49,690 3326-3326/com.example.illuminati.services D/Rohit: Ajout config wifi 04-08 19: 57: 49.964 3326-3326/com.example.illuminati.services D/Rohit: Config ajouté 04-08 19: 57: 49.964 3326-3326/com.example.illuminati.services D/Rohit: déconnexion 04-08 19: 57: 49.964 3326-3326/com.example.illuminati.services D/Rohit: id = 64 04-08 19: 57: 49.964 3326-3326/co m.example.illuminati.services D/Rohit: Déconnecté 04-08 19: 57: 49.964 3326-3326/com.example.illuminati.services D/Rohit: Activation du réseau 04-08 19: 57: 50.087 3326-3326 /com.example.illuminati.services D/Rohit: activé 04-08 19: 57: 50.087 3326-3326/com.example.illuminati.services D/Rohit: reconnexion .... 04-08 19:57: 50,089 3326-3326/com.example.illuminati.services D/Rohit: connecté

Si l'appareil est connecté à aucun réseau, il se connecte au réseau SPECIFIQUE Mais s'il est connecté à un autre réseau, il reconnecte au même réseau à nouveau.
Qu'est-ce qui me manque ici?
J'ai trouvé une question similaire dans stackoverflow mais cela n'aide pas.
Toute aide serait appréciée :)

Répondre

0

Ok Après 30-40 minutes de test, cela a fonctionné pour moi.
J'ai créé une méthode séparée pour désactiver le réseau actuellement actif.
Mais une chose que je ne comprends pas dans wifiManager.enableNetwork (networkId, true); le deuxième paramètre est disableOthers. Donc, si j'utilise wifiManager.enableNetwork (networkId, true); , il devrait faire le tour qui est fait dans ma méthode séparée.
Pensées pls?

Voici le code mis à jour

int networkId ; 
    wifiConfig = getWifiConfig(); 
    wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); 

    // if(wifiManager.) 

    WifiInfo info = wifiManager.getConnectionInfo(); 
    Log.d("Rohit", "current ssid "+info.getSSID()); 

    boolean disable =disableCurrent(info.getSSID()); 
    // Log.d("Rohit","disabled ?"+disable); 


    Log.d("Rohit", "Adding wifi config"); 
    networkId = wifiManager.addNetwork(wifiConfig); 
    //wifiManager.enableNetwork(networkId, true); 

    wifiManager.disconnect(); 
    Log.d("Rohit", "Config added\ndisconnecting\nid = " + networkId); 
    wifiManager.enableNetwork(networkId, true); 


    Log.d("Rohit", "Disconnected\nNetwork enabling"); 


    Log.d("Rohit", "enabled\n reconnecting...."); 
    wifiManager.reconnect(); 


    Log.d("Rohit", "connected"); 

Et voici la méthode séparée

public boolean disableCurrent(String ssid) 
{ 
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); 

    for(WifiConfiguration conf : configuredNetworks) 
    { 
     Log.d("Rohit","List "+conf.SSID); 
     if(conf.SSID.equals(ssid)) { 
      Log.d("Rohit","Inside"); 
      wifiManager.disableNetwork(conf.networkId); 
      return true; 
     } 
    } 
    return false; 
}