2016-02-21 1 views
2

J'essaie de me connecter à un réseau wifi en donnant le SSID et passer en utilisant les configurations WifiManager.Android 6: Connexion à un réseau wifi spécifique par programmation ne fonctionne pas

Sur la base de cette solution de threads: How do I connect to a specific Wi-Fi network in Android programmatically?

La méthode est appelée Reconnect. mais rien ne se passe (pas connecté).

La version Android (6.0.1) est-elle quelque chose? Si oui, comment effectuer une connexion réseau par programme sur Android 6?

+0

Avez-vous une solution? – SKK

Répondre

2

Ajoutez une configuration wifi à l'aide de addNetwork, puis connectez-vous à l'aide de enableNetwork.

WifiConfiguration wificonfiguration = new WifiConfiguration(); 
    StringBuffer stringbuffer = new StringBuffer("\""); 
    stringbuffer.append((new StringBuilder(String.valueOf(HOTSPOT_NAME))).append("\"").toString()); 
    wificonfiguration.SSID = stringbuffer.toString(); 
    wificonfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK); 
    wificonfiguration.allowedAuthAlgorithms.set(0); 
    wificonfiguration.status = 2; 
    wificonfiguration.preSharedKey = "\"" + HOTSPOT_PASSWORD + "\""; 

    int networkId_ = wifi.addNetwork(wificonfiguration); 

    if(networkId>-1){ 

      boolean status = wifi.enableNetwork(networkId_, true); 

    } 

Pour guimauve: Vos applications peuvent maintenant changer l'état d'WifiConfiguration objets que si vous avez créé ces objets. Vous n'êtes pas autorisé à modifier ou supprimer les objets WifiConfiguration créés par l'utilisateur ou par d'autres applications.

+1

HI, cette ligne a résolu mon problème: wificonfiguration.allowedKeyManagement.set (KeyMgmt.WPA_PSK); Maintenant, la connexion fonctionne. Merci – chimaira

+0

ce doenst travail dans android 6+ – xanexpt

+0

@xanexpt: Avez-vous eu le travail pour Android 6 par hasard? – user2489122

1

Quelques choses ont changé sur la façon dont vous vous connectez à un réseau WiFi depuis Android Lollipop et Marshmallow. Il y a un poste de blog sympa lié à la façon dont vous vous connectez au réseau Wi-Fi sur Guimauve et au-dessous des versions

http://www.intentfilter.com/2016/08/programatically-connecting-to-wifi.html

Le poste décrit un scénario lorsque le réseau WiFi n'a pas la connectivité et que vous voulez envoyer le trafic à travers ce réseau (quelque chose comme portail captif). Mais il explique également le processus complet et fonctionnerait pour les réseaux normaux. Vous ne trouverez pas le code exact mais cela pourrait vous aider à savoir où vous êtes coincé.

1

Vous devez appeler disconnect() et reconnecter() de WiFiManager. Cela fonctionne pour moi:

   WifiConfiguration conf = new WifiConfiguration(); 
       conf.hiddenSSID = true; 
       conf.priority = 1000; 
       conf.SSID = "\"" + SSID + "\""; 
       conf.preSharedKey = "\""+Password+"\""; 
       conf.status = WifiConfiguration.Status.ENABLED; 
       conf.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 

       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 
       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 

       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 

       conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
       conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 

       conf.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
       conf.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
       int res = wifiManager.addNetwork(conf); 
       boolean es = wifiManager.saveConfiguration(); 
       Log.d(TAG, "saveConfiguration returned " + es); 
       wifiManager.disconnect(); 
       boolean bRet = wifiManager.enableNetwork(res, true); 
       Log.i(TAG, "enableNetwork bRet = " + bRet); 
       wifiManager.reconnect(); 
+0

mais comment nous allons trouver que sa connexion, ou eu une erreur de mot de passe? – NehaK

+0

Il se connecte toujours à n'importe quel réseau précédent le plus proche, quel que soit le nouveau SSID que vous ajoutez/sélectionnez. EDIT: L'utilisation de la méthode de priorité de @ Nishkarsh résout ce problème – behelit

-1

Essayez et profiter:

int res = mWifiManager.addNetwork(wifiConfiguration); 
             if (res == -1) { 
          // Get existed network id if it is already added to WiFi network 
          res = getExistingNetworkId(wifiConfiguration.SSID); 
          Log.d(TAG, "getExistingNetwrkId: " + res); 
         } 

     private int getExistingNetworkId(String SSID) { 
      List<WifiConfiguration> configuredNetworks = mWifiManager.getConfiguredNetworks(); 
      if (configuredNetworks != null) { 
       for (WifiConfiguration existingConfig : configuredNetworks) { 
        if (SSID.equalsIgnoreCase(existingConfig.SSID)) { 
         return existingConfig.networkId; 
        } 
       } 
      } 
      return -1; 
     } 
6

Quelques choses ont changé sur la façon dont vous vous connectez à un réseau Wi-Fi depuis Android Marshmallow. Le code suivant vous aidera ... Si vous utilisez Android 6.0 ou versions ... à basse altitude

public void connectToWifi(){ 
    try{ 
     WifiManager wifiManager = (WifiManager) super.getSystemService(android.content.Context.WIFI_SERVICE); 
     WifiConfiguration wc = new WifiConfiguration(); 
     WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
     wc.SSID = "\"NETWORK_NAME\""; 
     wc.preSharedKey = "\"PASSWORD\""; 
     wc.status = WifiConfiguration.Status.ENABLED; 
     wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
     wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 

     wifiManager.setWifiEnabled(true); 
     int netId = wifiManager.addNetwork(wc); 
     if (netId == -1) { 
      netId = getExistingNetworkId(wc.SSID); 
     } 
     wifiManager.disconnect(); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.reconnect(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
private int getExistingNetworkId(String SSID) { 
    WifiManager wifiManager = (WifiManager) super.getSystemService(Context.WIFI_SERVICE); 
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); 
    if (configuredNetworks != null) { 
     for (WifiConfiguration existingConfig : configuredNetworks) { 
      if (existingConfig.SSID.equals(SSID)) { 
       return existingConfig.networkId; 
      } 
     } 
    } 
    return -1; 
} 

Et ajouter des autorisations dans le fichier Manifest

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />