Android: Cómo habilitar / deshabilitar Wifi o conexión a Internet mediante programación


82

Usando la clase Connectivity Manager podemos tener acceso a wifi o red de Internet:

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

// ARE WE CONNECTED TO THE NET
if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
  connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
  // ...
}

donde 0y 1respectivamente se refiere a la conexión móvil y wifi

Si mi dispositivo Android está conectado a ambos, ¿podemos cambiar entre cualquiera de las redes o podemos desactivar alguna de las redes? Como usar una función:

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);

1
¿Obtuvo alguna solución para la opción de desactivación de datos móviles?
— Parthi

Respuestas:


184

Sé de habilitar o deshabilitar wifi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

donde el estado puede ser trueo falsesegún el requisito.

Editar:

También necesita los siguientes permisos en su archivo de manifiesto:

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

47
También en el manifiesto:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
— Comic Sans MS Lover

3
¿Esto difiere de wifiManager.reconnect ()? ¿Qué pasa con wifiManager.reassociate ()? Además, en el enfoque anterior, si desea restablecer el WiFi, ¿podría llamar a wifiManager.setWifiEnabled (falso) y wifiManager.setWifiEnabled (verdadero) uno tras otro? ¿O tendría que deshabilitarlo primero, luego esperar alguna señal (receptor de transmisión, etc.) antes de habilitarlo nuevamente?
— Marzo

Si desea un tutorial de demostración, entonces está aquí: demoadda.com/demo/android/…
— Kishan Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”también es necesario.
— zionpi

¿Es posible controlar WiFi en el dispositivo M desde la aplicación?
— Nithinjith

30

Para habilitar WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(true);

Para deshabilitar WiFi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false);

Nota: Para acceder con el estado WiFi, debemos agregar los siguientes permisos dentro del archivo AndroidManifest.xml:

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE

4
solo es necesario CHANGE_WIFI_STATE, al menos en Android 4.2
— voghDev

1
UPDATE_DEVICE_STATS es solo para aplicaciones del sistema
— marienke

Desde Android Q, no se puede encender / apagar directamente el wifi
— Ravindra Kushwaha

12

Una solución completa:

try {
    WifiManager wifi = (WifiManager) 
        context.getSystemService(Context.WIFI_SERVICE);

    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"SSIDName\"";
    wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED; 

    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

    boolean b=wifi.isWifiEnabled();
    if (b) {
        wifi.setWifiEnabled(false);
        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show();
    } else {
        wifi.setWifiEnabled(true);
        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show();
    }
    //Log.d("WifiPreference", "enableNetwork returned " + b );

} catch (Exception e) {
    e.printStackTrace();
}

Referencia: http://amitkumar-android.blogspot.com/p/installation-steps.html


1
Falta la llamada para configurar el administrador wifi con la configuración wifi: wifi.addNetwork (wc);
— Error 454

4
¿Por qué codificaría su SSID y contraseña? No es Buena idea.
— Lifeson106

@ lifeson106 Creo que es solo para fines de demostración.
— Bertram Gilfoyle

4

Para habilitar deshabilitar Wifi, use la WifiManagerclase para obtener servicios del sistema (dispositivo Android) para Wifi:

WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE); 

Ahora, el objeto wifide la WifiManagerclase se usa para obtener el estado de wifi:

if(wifi.isWifiEnabled())
    //Perform Operation
else
    //Other Operation

Y lo más importante, no olvide otorgar el siguiente permiso en su archivo de manifiesto de Android:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Para obtener información detallada y el código de muestra completo del proyecto para habilitar / deshabilitar Wifi en Android, visite el enlace de mi sitio web .


3

En Android Q (Android 10) ya no puede habilitar / deshabilitar wifi mediante programación. Use el Panel de configuración para alternar la conectividad wifi:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
    startActivityForResult(panelIntent, 0)
} else {
    // use previous solution, add appropriate permissions to AndroidManifest file (see answers above)
    (this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}

1

agregue este permiso en su manifiesto y luego use el código anterior para cambiar el estado de WiFi:

 <!--permission ge enable and disable WIFI in android-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1

No pude acceder al objeto de contexto directamente.
Mi solución es la siguiente:

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
wifiManager.SetWifiEnabled(state);

También tuve que cambiar algunos escritos, por ejemplo. WIFI_SERVICE frente a WifiService.


0

Es posible habilitar / deshabilitar wifi en dispositivos anteriores a Android 10 usando el siguiente código:

WifiManager wifiManager = 
(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);

wifiManager.setWifiEnabled (estado);

Pero tenga en cuenta que ya no es posible hacer esto en Android 10 y probablemente también lo haga.
https://issuetracker.google.com/issues/141011684


0

Android 10 (Q) en adelante wifi no se puede habilitar / deshabilitar, debe abrir la intención de configuración,

// for android Q and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Intent panelIntent = new 
Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
            startActivityForResult(panelIntent, 0);
        } else {
            // for previous android version
            WifiManager wifiManager = (WifiManager) 
this.getApplicationContext().getSystemService(WIFI_SERVICE);
            wifiManager.setWifiEnabled(true);
        }

En manifiesto,

 <uses-permission
    android:name="android.permission.CHANGE_WIFI_STATE"
    android:required="true" />

0

Este método está obsoleto ahora a partir de ahora con Android Q.

Intente esto realmente ayudará.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {// if build version is less than Q try the old traditional method
                    if (!wifiManager.isWifiEnabled()) {
                        wifiManager.setWifiEnabled(true);
                        btnOnOff.setText("Wifi ONN");
                    } else {
                        wifiManager.setWifiEnabled(false);
                        btnOnOff.setText("Wifi OFF");
                    }
                } else {// if it is Android Q and above go for the newer way    NOTE: You can also use this code for less than android Q also
                    Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
                    startActivityForResult(panelIntent, 1);
                }

¿Vale la pena señalar un método nuevo / preferido con un ejemplo?
— user1016765

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente reputación , podrá comentar en cualquier publicación ; en su lugar, proporcione respuestas que no requieran aclaración por parte del autor de la pregunta . - De la opinión
— Ryan M
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.