Android WifiManager.addNetwork () devuelve -1
Estoy escribiendo una aplicación de Android que se conectará a un punto de acceso WPA específico, cuando se conecte, emitirá una llamada http. No guardará la configuración de la red. He leído casi todas las publicaciones en el desbordamiento de pila al conectarme a la red wifi, pero no encuentro la respuesta que funcione para mí. Aquí está el código que estoy usando para conectarme.
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;
}
Sin embargo, netId siempre es -1. Lo he probado en dos teléfonos diferentes (ICS: HTC Rezound y GingerBread: Motorola DroidX). Ambos muestran exactamente los mismos resultados. ¿Qué estoy haciendo mal?
Edición: probé el mismo código con el punto de acceso WPA2 y obtuve resultados muy extraños. Cuando se ejecutó este código, la primera vez devolvería -1, pero si llamo la segunda vez al mismo método con un retraso de 1 segundo, devolvería un ID de red válido. Así que las preguntas son
¿Por qué el código anterior no se conecta a wpa?en wpa2, ¿por qué necesito llamar al método anterior dos veces para conectarme? Edición: observé que tenía que conectarme varias veces para conectarme. A veces tomaría 3-4 veces para conectarse. Así que por ahora estoy en bucle hasta que agregue config devuelve> 0 id.