Korzystając z klasy Connectivity Manager możemy uzyskać dostęp do sieci WiFi lub 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 ) {
// ...
}
gdzie 0
i 1
odpowiednio odnosi się do połączenia mobilnego i Wi-Fi
Jeśli moje urządzenie z Androidem jest podłączone do obu, czy możemy przełączać się między którąkolwiek z sieci, czy też możemy wyłączyć dowolną z sieci? Podobnie jak w przypadku korzystania z funkcji:
connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);
Odpowiedzi:
Wiem o włączaniu lub wyłączaniu Wi-Fi:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(status);
gdzie status może być
true
lubfalse
zgodnie z wymaganiami.Edytować:
Potrzebujesz również następujących uprawnień w pliku manifestu:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
źródło
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”
jest również potrzebne.Aby włączyć WiFi:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifi.setWifiEnabled(true);
Aby wyłączyć WiFi:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifi.setWifiEnabled(false);
Uwaga: aby uzyskać dostęp ze stanem WiFi, musimy dodać następujące uprawnienia w pliku AndroidManifest.xml:
android.permission.ACCESS_WIFI_STATE android.permission.UPDATE_DEVICE_STATS android.permission.CHANGE_WIFI_STATE
źródło
Kompletne rozwiązanie:
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(); }
Źródła: http://amitkumar-android.blogspot.com/p/installation-steps.html
źródło
Aby włączyć wyłączenie Wi-Fi, użyj
WifiManager
klasy, aby uzyskać usługi systemowe (urządzenie z systemem Android) dla Wi-Fi:WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE);
Teraz obiekt
wifi
zWifiManager
klasy służy do uzyskania statusu WiFi:if(wifi.isWifiEnabled()) //Perform Operation else //Other Operation
A co najważniejsze, nie zapomnij dać następujących uprawnień w swoim pliku manifestu Androida:
<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" />
Aby uzyskać szczegółowe informacje i pełny przykładowy kod projektu do włączania / wyłączania Wi-Fi na Androidzie, odwiedź link do mojej witryny .
źródło
W systemie Android Q (Android 10) nie można już programowo włączać / wyłączać Wi-Fi. Użyj panelu ustawień, aby przełączyć łączność Wi-Fi:
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*/ } }
źródło
dodaj to uprawnienie do swojego manifestu, a następnie użyj powyższego kodu, aby zmienić stan Wi-Fi:
<!--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"/>
źródło
Nie mogłem uzyskać bezpośredniego dostępu do obiektu kontekstu.
Moje rozwiązanie jest następujące:
Context appContext = Android.App.Application.Context; var wifiManager = (WifiManager)appContext.GetSystemService(WifiService); wifiManager.SetWifiEnabled(state);
Musiałem też zmienić niektóre pisma np. WIFI_SERVICE a WifiService.
źródło
Możliwe jest włączanie / wyłączanie Wi-Fi na urządzeniach z systemem starszym niż Android 10 przy użyciu następującego kodu:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled (stan);
Ale pamiętaj , że nie można już tego zrobić na Androidzie 10 i prawdopodobnie również.
https://issuetracker.google.com/issues/141011684
źródło
Android 10 (Q) i nowsze Wi-Fi nie mogą być włączone / wyłączone, musisz otworzyć zamiar ustawienia,
// 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); }
W oczywisty sposób
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" android:required="true" />
źródło
Ta metoda jest obecnie przestarzała, począwszy od systemu Android Q.
Spróbuj To naprawdę pomoże.
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); }
źródło