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);
Javanator
fuente
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"/> 
viv
fuente
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
Valeh Ağayev
fuente
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

Amit Kumar
fuente
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 .

Hemant Mendi Ratta
fuente
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*/ }
}
Sergey
fuente
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"/>
varun bhardwaj
fuente
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.

Franklin84
fuente
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

AdeleGoldberg
fuente
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" />
RHL
fuente
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);
                }
Shivam Anand
fuente
¿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