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

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

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

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


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 .


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*/ }
}

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

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.


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


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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.