android wifiManager.addNetwork retourne -1
Je suis en train d'écrire une application android qui va se connecter à un WPA point d'accès, une fois connecté, il sera question d'un appel http. Il ne sera pas sauvegarder la config réseau.
J'ai lu presque tous les post sur un débordement de pile sur la connexion à un réseau wifi, mais ne peut pas trouver la réponse qui fonctionne pour moi. Ici c'est le code que j'utilise pour se connecter..
WifiConfiguration wc = new WifiConfiguration();
wc.allowedAuthAlgorithms.clear();
wc.allowedGroupCiphers.clear();
wc.allowedPairwiseCiphers.clear();
wc.allowedProtocols.clear();
wc.allowedKeyManagement.clear();
wc.SSID = "\"".concat("<ssid>").concat("\"");
wc.preSharedKey = "\"".concat("<password>").concat("\"");
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); //For WPA2
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); //For WPA
wc.priority = 0;
//wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
//connect to and enable the connection
WifiManager wifiManager = (WifiManager) getSystemService(this.WIFI_SERVICE);
int netId = wifiManager.addNetwork(wc);
boolean wifiEnabled = wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
Log.d("opener", "addNetwork returned " + netId);
if (netId > 0) {
wifiId = netId;
}
Cependant netId est toujours -1. J'ai essayé sur deux téléphones différents (ICS:HTC Rezound et de pain d'épice:Motorola DroidX). Les deux montrent exactement les mêmes résultats.
Ce que je fais mal ?
Edit: j'ai essayé même code WPA2 point d'accès et est devenu très bizarre résultats. Lorsque ce code est exécuté, pour la première fois, il serait de retour -1, mais si je l'appelle même méthode deuxième fois avec un délai de 1 seconde, il serait de retour valide netId. Donc les questions sont
- pourquoi ne code ci-dessus de ne pas se connecter à wpa ?
- en wpa2, pourquoi dois-je appeler méthode ci-dessus deux fois pour se connecter ? Edit: j'ai observé que j'avais à se connecter plusieurs fois pour se connecter. Parfois, il faudrait 3-4 fois pour se connecter. Donc pour l'instant je suis en boucle jusqu'à l'ajout de config de retour >0 id.
Je vais avoir des problèmes similaires. Mon addNetwork échouent avec -1. Quelqu'un a résoudre cela?
OriginalL'auteur Mukesh Aggarwal | 2012-08-18
Vous devez vous connecter pour publier un commentaire.
Éventuellement un peu de retard, mais essayez ceci pour vous connecter à Ouvrir/WPA/WPA2/WEP des réseaux sécurisés
Évidemment définir vos propres variables pour les différents types de sécurité applicables. La clé (pardonnez le jeu de mots) pour la connexion à un WEP réseau sécurisé est le getHexKey méthode que ci-dessous.
Dans mes tests, pour les réseaux ouverts uniquement le
wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
partie doit être appelé.OriginalL'auteur Mark OB
J'ai trouvé que si la clé partagée est de moins de 8 caractères, il sera de retour -1.
OriginalL'auteur Eric Woodruff
J'ai eu le même problème. J'ai trouvé que votre wifi doit être sous tension lors de l'appel de addNetwork.
OriginalL'auteur clovicek
J'ai juste eu ce même problème. Apparemment tout allait bien, mais alors il n'était pas.
Ce que j'ai trouvé est: est-ce
Android WifiStateMachine ne vous permettra pas d'ajouter ou de modifier les réseaux, à moins que demandeur est en cours d'exécution et connecté à. Cela affecte les services en cours d'exécution sur les start-up et les services en cours d'exécution même si le WIFI est désactivé.
Android WifiConfigStore pistes propriétaires du réseau wifi par le UIDE. Cela signifie que vous ne pouvez pas être en mesure de modifier le réseau créé par un autre processus.
La bonne façon de ajouter un réseau est:
android.pemissions.OVERRIDE_WIFI_CONFIG
autorisation dans votre fichier manifest.WifiManager.setWifiEnabled(true)
.WifiManager.pingSupplicant()
renvoie la valeur true.WifiConfiguration
, puis la passer àWifiManager.addNetwork()
. Assurez-vous que la valeur retournée n'est pas (-1).addNetwork()
comme un argument deWifiConfiguration.enableNetwork()
appel (sauf si c'est de -1). Notez que le paramètre booléen signifiedisableOthers
et devrait être faux, à moins que vous ayez le droit de modifier tous les autres réseaux: il peut échouer à l'interne, si vous le réglez à vrai.Cela devrait vous permettre d'ajouter (et connect) par programmation pour un nouveau réseau Wifi.
android.pemissions.OVERRIDE_WIFI_CONFIG
-la permission de n'importe où dans la documentation ou de la totalité de l'internet. Pouvez vous nous donner des précisions sur l'endroit où vous l'avez obtenu?il n'y a pas une telle chose comme
android.permission.OVERRIDE_WIFI_CONFIG
.OriginalL'auteur Tomasz W