Android: Wifi veya İnternet Bağlantısı Programlı Olarak Nasıl Etkinleştirilir / Devre Dışı Bırakılır


82

Bağlantı Yöneticisi Sınıfını kullanarak ya wifi ya da İnternet Ağına erişebiliriz:

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

burada 0ve 1sırasıyla mobil ve wifi bağlantısını ifade eder

Android cihazım her ikisine de bağlıysa, herhangi bir ağ arasında geçiş yapabilir miyiz veya ağlardan herhangi birini devre dışı bırakabilir miyiz? Bir işlevi kullanmak gibi:

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

1
Mobil veri devre dışı bırakma seçeneği için herhangi bir çözüm buldunuz mu?
Parthi

Yanıtlar:


186

Wifi'yi etkinleştirmeyi veya devre dışı bırakmayı biliyorum:

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

Durum nerede olabilir trueveya gerektiği falsegibi.

Düzenle:

Ayrıca manifest dosyanızda aşağıdaki izinlere de ihtiyacınız var:

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

47
Ayrıca manifestte:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover

3
Bu wifiManager.reconnect () 'den farklı mıdır? Peki ya wifiManager.reassociate ()? Ayrıca yukarıdaki yaklaşımda WiFi'yi sıfırlamak isterseniz wifiManager.setWifiEnabled (false) ve wifiManager.setWifiEnabled (true) 'ı arka arkaya çağırabilir misiniz? Yoksa önce devre dışı bırakmanız, ardından tekrar etkinleştirmeden önce bir sinyal (yayın alıcısı vb.) Beklemeniz mi gerekir?
2013

Demo öğretici fot istiyorsanız, o zaman burada: demoadda.com/demo/android/…
Kishan Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”ayrıca gereklidir.
zionpi

M cihazındaki WiFi'yi Uygulamadan kontrol etmek mümkün müdür?
Nithinjith 01

30

WiFi'yi etkinleştirmek için:

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

WiFi'yi Devre Dışı Bırakmak İçin:

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

Not: WiFi durumuyla erişmek için AndroidManifest.xml dosyasının içine aşağıdaki izinleri eklememiz gerekir:

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

4
yalnızca CHANGE_WIFI_STATE gereklidir, en azından Android 4.2'de
voghDev

1
UPDATE_DEVICE_STATS yalnızca sistem uygulamaları içindir
marienke

Android Q'dan,
wifi'yi

13

Tam bir çözüm:

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

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


1
Wifi yöneticisini wifi yapılandırmasıyla ayarlama çağrısı eksik: wifi.addNetwork (wc);
Hata 454

4
SSID'nizi ve şifrenizi neden sabit kodladınız? İyi bir fikir değil.
lifeson106

@ lifeson106 Bunun sadece gösteri amaçlı olduğunu düşünüyorum.
Bertram Gilfoyle

4

Wifi'yi devre dışı bırakmak için Wifi WifiManageriçin sistem (android cihaz) hizmetlerini almak üzere sınıfı kullanın:

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

Şimdi nesne wifiarasında WifiManagersınıfının wifi durumunu almak için kullanılır:

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

Ve en önemlisi, Android Manifest Dosyanızda aşağıdaki izni vermeyi unutmayın:

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

Android'de Wifi'ı etkinleştirmek / devre dışı bırakmak için projenin ayrıntılı bilgi ve tam örnek kodunu almak için web sitemdeki bağlantıyı ziyaret edin .


4

In Android Q (Android 10) programlı artık / devre dışı wifi etkinleştiremezsiniz. WiFi bağlantısını değiştirmek için Ayarlar Panelini kullanın :

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

bu izni bildiriminize ekleyin ve ardından WiFi durumunu değiştirmek için yukarıdaki kodu kullanın:

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

Bağlam nesnesine doğrudan erişemedim.
Benim çözümüm aşağıdaki gibidir:

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

Ayrıca bazı yazıları da değiştirmek zorunda kaldım mesela. WIFI_SERVICE ve WifiService karşılaştırması.


0

Aşağıdaki kodu kullanarak Android 10 öncesi cihazlarda wifi'yi etkinleştirmek / devre dışı bırakmak mümkündür :

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

wifiManager.setWifiEnabled (durum);

Ama not mümkün olmadığını Android 10 artık bunu ve muhtemelen de önde gidiyor.
https://issuetracker.google.com/issues/141011684


0

Android 10 (Q) üstü wifi etkinleştirilemez / devre dışı bırakılamaz, ayar amacını açmanız gerekir,

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

Açıkça,

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

0

Bu yöntem artık Android Q ile başlayarak kullanımdan kaldırılmıştır.

Deneyin Bu gerçekten yardımcı olacaktır.

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

Örnekle yeni / tercih edilen yönteme işaret etmeye değer mi?
user1016765

Bu soruya bir cevap vermiyor. Yeterli itibara sahip olduğunuzda , herhangi bir gönderi hakkında yorum yapabilirsiniz ; bunun yerine soruyu soranın açıklamasını gerektirmeyen yanıtlar verin . - Şu kaynaktan
Ryan M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.