Android: So aktivieren / deaktivieren Sie die WLAN- oder Internetverbindung programmgesteuert

82

Mit der Connectivity Manager-Klasse können wir entweder auf WLAN oder das Internet zugreifen:

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 ) {
  // ...
}

wo 0und 1bezieht sich jeweils auf mobile und WiFi-Verbindung

Wenn mein Android-Gerät mit beiden verbunden ist, können wir dann zwischen den Netzwerken wechseln oder die Netzwerke deaktivieren? Wie mit einer Funktion:

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);
Javanator
quelle
Haben Sie eine Lösung für die Option zum Deaktivieren mobiler Daten erhalten?
Parthi

Antworten:

183

Ich weiß, wie man WLAN aktiviert oder deaktiviert:

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

wo Status sein kann trueoder falsegemäß Anforderung.

Bearbeiten:

Sie benötigen außerdem die folgenden Berechtigungen in Ihrer Manifestdatei:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
viv
quelle
47
Ebenfalls im Manifest:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover
2
Unterscheidet sich dies von wifiManager.reconnect ()? Was ist mit wifiManager.reassociate ()? Wenn Sie im obigen Ansatz das WLAN zurücksetzen möchten, können Sie dann wifiManager.setWifiEnabled (false) und wifiManager.setWifiEnabled (true) hintereinander aufrufen? Oder müssten Sie es zuerst deaktivieren und dann auf ein Signal (Rundfunkempfänger usw.) warten, bevor Sie es wieder aktivieren?
Marchy
Wenn Sie ein Demo-Tutorial für möchten, dann ist es hier: demoadda.com/demo/android/…
Kishan Dhamat
“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”wird auch benötigt.
Zionpi
Ist es möglich, WiFi in M-Geräten von der Anwendung aus zu steuern?
Nithinjith
30

So aktivieren Sie WLAN:

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

So deaktivieren Sie WLAN:

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

Hinweis: Um mit dem WLAN-Status zugreifen zu können, müssen Sie der Datei AndroidManifest.xml die folgenden Berechtigungen hinzufügen:

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE
Valeh Ağayev
quelle
4
Nur CHANGE_WIFI_STATE ist notwendig, zumindest in Android 4.2
voghDev
1
UPDATE_DEVICE_STATS ist nur für System-Apps
Marienke
12

Eine Komplettlösung:

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();
}

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

Amit Kumar
quelle
1
Der Aufruf zum Festlegen des WLAN-Managers mit der WLAN-Konfiguration fehlt: wifi.addNetwork (wc);
Fehler 454
4
Warum sollten Sie Ihre SSID und Ihr Passwort fest codieren? Keine gute Idee.
lifeson106
@ lifeson106 Ich denke, es ist nur zum Zweck der Demonstration.
Bertram Gilfoyle
4

Um die Deaktivierung von Wifi zu aktivieren, verwenden Sie die WifiManagerKlasse, um Systemdienste (Android-Geräte) für Wifi abzurufen:

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

Jetzt wird das Objekt wifider WifiManagerKlasse verwendet, um den WLAN-Status abzurufen:

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

Und vergessen Sie vor allem nicht, die folgende Berechtigung in Ihrer Android-Manifestdatei anzugeben:

<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" />

Um detaillierte Informationen und den vollständigen Beispielcode des Projekts zum Aktivieren / Deaktivieren von Wifi auf Android zu erhalten, besuchen Sie meinen Website-Link .

Hemant Mendi Ratta
quelle
3

In Android Q (Android 10) können Sie WLAN nicht mehr programmgesteuert aktivieren / deaktivieren. Verwenden Sie das Einstellungsfeld, um die WLAN-Verbindung umzuschalten:

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
quelle
1

Fügen Sie diese Berechtigung in Ihr Manifest ein und verwenden Sie dann den obigen Code, um den WLAN-Status zu ändern:

 <!--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
quelle
1

Ich konnte nicht direkt auf das Kontextobjekt zugreifen.
Meine Lösung lautet wie folgt:

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

Außerdem musste ich einige Schriften ändern, z. WIFI_SERVICE vs. WifiService.

Franklin84
quelle
0

Es ist möglich, WLAN auf Geräten vor Android 10 mit dem folgenden Code zu aktivieren / deaktivieren :

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

wifiManager.setWifiEnabled (Status);

Aber zur Kenntnis , dass es nicht möglich ist , dies zu tun mehr auf Android 10 und wahrscheinlich auch gehen voran.
https://issuetracker.google.com/issues/141011684

AdeleGoldberg
quelle
0

Android 10 (Q) ab WLAN kann nicht aktiviert / deaktiviert werden. Sie müssen die Einstellungsabsicht öffnen.

// 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);
        }

Im Manifest,

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

Diese Methode ist ab sofort ab Android Q veraltet.

Versuchen Sie dies wird wirklich helfen.

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
quelle
Es lohnt sich, auf eine neue / bevorzugte Methode mit Beispiel hinzuweisen?
user1016765
Dies gibt keine Antwort auf die Frage. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren . Geben Sie stattdessen Antworten, die nicht vom Fragesteller geklärt werden müssen . - Aus dem Rückblick
Ryan M