¿Tiene alguna idea de cómo establecer una conexión wifi con el envío de la contraseña en mi aplicación de Android?Conexión WiFi Android programáticamente
Respuesta
Pase el SSID y su contraseña al siguiente método.
public void connectToAP(String ssid, String passkey) {
Log.i(TAG, "* connectToAP");
WifiConfiguration wifiConfiguration = new WifiConfiguration();
String networkSSID = ssid;
String networkPass = passkey;
Log.d(TAG, "# password " + networkPass);
for (ScanResult result : scanResultList) {
if (result.SSID.equals(networkSSID)) {
String securityMode = getScanResultSecurity(result);
if (securityMode.equalsIgnoreCase("OPEN")) {
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "# add Network returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
} else if (securityMode.equalsIgnoreCase("WEP")) {
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.wepKeys[0] = "\"" + networkPass + "\"";
wifiConfiguration.wepTxKeyIndex = 0;
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "### 1 ### add Network returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
}
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
wifiConfiguration.preSharedKey = "\"" + networkPass + "\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "### 2 ### add Network returned " + res);
wifiManager.enableNetwork(res, true);
boolean changeHappen = wifiManager.saveConfiguration();
if(res != -1 && changeHappen){
Log.d(TAG, "### Change happen");
AppStaticVar.connectedSsidName = networkSSID;
}else{
Log.d(TAG, "*** Change NOT happen");
}
wifiManager.setWifiEnabled(true);
}
}
}
public String getScanResultSecurity(ScanResult scanResult) {
Log.i(TAG, "* getScanResultSecurity");
final String cap = scanResult.capabilities;
final String[] securityModes = { "WEP", "PSK", "EAP" };
for (int i = securityModes.length - 1; i >= 0; i--) {
if (cap.contains(securityModes[i])) {
return securityModes[i];
}
}
return "OPEN";
}
No olvide agregar el permiso necesario en el archivo de Manifest.
El código publicado desde AnujAroshA aquí es realmente útil. Pero falta un otro caso:
..
} else if (securityMode.equalsIgnoreCase("PSK")) {
// PSK code
..
De lo contrario, el código PSK también se ejecuta para las redes WEP y OPEN.
Y el estilo del código no es óptimo en mi opinión. No es necesario crear los dos Strings networkSSID y networkPass. Simplemente puede usar ssid o passkey.
Sugerencia: Dividir creando la configuración wifi y el método de conexión.
(1) Método de creación de la WifiConfiguration:
private WifiConfiguration createAPConfiguration(String networkSSID, String networkPasskey, String securityMode) {
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
if (securityMode.equalsIgnoreCase("OPEN")) {
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else if (securityMode.equalsIgnoreCase("WEP")) {
wifiConfiguration.wepKeys[0] = "\"" + networkPasskey + "\"";
wifiConfiguration.wepTxKeyIndex = 0;
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
} else if (securityMode.equalsIgnoreCase("PSK")) {
wifiConfiguration.preSharedKey = "\"" + networkPasskey + "\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
} else {
Log.i(TAG, "# Unsupported security mode: "+securityMode);
return null;
}
return wifiConfiguration;
}
(2) Método para la AP conectar:
public int connectToAP(String networkSSID, String networkPasskey) {
for (ScanResult result : scanResultList) {
if (result.SSID.equals(networkSSID)) {
String securityMode = getScanResultSecurity(result);
WifiConfiguration wifiConfiguration = createAPConfiguration(networkSSID, networkPasskey, securityMode);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "# addNetwork returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
boolean changeHappen = wifiManager.saveConfiguration();
if (res != -1 && changeHappen) {
Log.d(TAG, "# Change happen");
connectedSsidName = networkSSID;
} else {
Log.d(TAG, "# Change NOT happen");
}
return res;
}
}
return -1;
}
(3) El Método de escaneado 100% como publicado AnujAroshA.
public String getScanResultSecurity(ScanResult scanResult) {
final String cap = scanResult.capabilities;
final String[] securityModes = { "WEP", "PSK", "EAP" };
for (int i = securityModes.length - 1; i >= 0; i--) {
if (cap.contains(securityModes[i])) {
return securityModes[i];
}
}
return "OPEN";
}
100% Funciona.
De esta manera se puede conectar a su WIF específica Este código de MainActivity.java
////////////// >>> Conexión WiFi (WP2) < < < ////////////////
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", "Wifi name");
wifiConfig.preSharedKey = String.format("\"%s\"", "Wifi password");
WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE);
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
y también no se olvide de incluir este código a su AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
- 1. android encender wifi programáticamente
- 2. Habilitar/deshabilitar la conexión USB o WiFi programáticamente en Android
- 3. Conexión WiFi a través de Android
- 4. Programación de socket Android sin conexión WIFi
- 5. conexión wifi cambió la acción en Android
- 6. conexión wifi GameKit?
- 7. Conectividad WIFI a WIFI con Android
- 8. ¿Cómo apagar programáticamente WiFi en un dispositivo Android?
- 9. cómo obtener la información de conexión wifi actual en android
- 10. conexión múltiple directa WiFi de Android ad-hoc
- 11. Android WIFI Cómo detectar cuando la conexión WIFI específica está disponible
- 12. WM y C#: ¿Cómo configurar una conexión WiFi Ad-Hoc programáticamente?
- 13. android wifi permission
- 14. Problemas de script wifi Android
- 15. Cómo deshabilitar la conexión GSM en Android programáticamente
- 16. Autenticación automática para Android WiFi Direct
- 17. Interfaz Android con conexión Ethernet
- 18. Android conectarse a WiFi sin interacción humana
- 19. Android Scan for Wifi networks
- 20. Configurar Android IP, DNS, configuración GATEWAY programáticamente
- 21. Conexión HTTP de Android rechazada
- 22. Datos basura transmitidos en WiFi Conexión TCP desde el escritorio a Android
- 23. iOS detectar puntos de conexión WiFi o dispositivos Bluetooth
- 24. Conexión no wifi con detección de detección de teléfono
- 25. android Desvío de llamadas programáticamente
- 26. WiFi-Comunicación directa entre Mac/Windows y Android
- 27. ¿Realizar Segue programáticamente sin conexión de botón?
- 28. Comprobando la conexión a Internet en android
- 29. Android adb sobre WiFi install apk
- 30. Android: simular WiFi en el emulador?
este código no compila, wh ¿Se definen las variables scanResultList y wifiManager? – yoprogramo
Deberá obtener WifiManager wifiManager (Context.getSystemService (Context.WIFI_SERVICE)) y hacer una llamada en él (wifiMananger.getScanResults()) para obtener la variable scanResultList. El código anterior supone que ya tiene una lista de redes disponibles. – wblaschko
¿Qué es AppStaticVar en su código? –