Nie chcę, aby mój użytkownik nawet próbował coś pobrać, chyba że ma połączenie Wi-Fi. Wydaje mi się jednak, że jestem w stanie stwierdzić, czy Wi-Fi jest włączone, ale nadal mogą mieć połączenie 3G.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
Jednak państwo nie jest tym, czego bym się spodziewał. Mimo, że Wi-Fi jest podłączone, dostaję OBTAINING_IPADDR
stan.
źródło
android.permission.ACCESS_NETWORK_STATE
do pliku AndroidManifest.xml, aby to zadziałało.connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Ponieważ metoda NetworkInfo.isConnected () jest teraz przestarzała w API-23 , oto metoda, która wykrywa, czy karta Wi-Fi jest włączona, a także podłączona do punktu dostępu za pomocą WifiManager zamiast:
źródło
NetworkInfo.isConnected()
nie wygląda mi na przestarzałe.android.permission.ACCESS_WIFI_STATE
Po prostu używam następujących:
Który zwróci jeden z tych stanów w momencie wywołania getSupplicantState ();
źródło
Używam tego w swoich aplikacjach, aby sprawdzić, czy aktywną siecią jest Wi-Fi:
źródło
active
siecią (tą, która będzie używana do pobierania) jest WiFiNetworkInfo#isConnected
jest obecnie nieaktualnaRzuciłem okiem na kilka takich pytań i wpadłem na to:
Używam if do sprawdzenia licencji w Root Toolbox PRO i wydaje się, że działa świetnie.
źródło
getNetworkInfo()
zwróci zero, jeśli sieć nie istnieje. Jeśli więc urządzenie nie ma połączenia mobilnego, spowoduje to błąd. W większości przypadków TYPE_ETHERNET spowoduje w tym przypadku wartość zerową, ponieważ większość urządzeń nie będzie miała połączenia Ethernet.Chociaż odpowiedź Jasona jest poprawna, obecnie getNetWorkInfo (int) jest przestarzałą metodą. Zatem następna funkcja byłaby miłą alternatywą:
źródło
Za pomocą
WifiManager
możesz zrobić:Metoda getNeworkId zwraca -1 tylko wtedy, gdy nie jest podłączona do sieci;
źródło
źródło
boolean isConnectedOrConnecting ()
Wskazuje, czy połączenie sieciowe istnieje, czy jest w trakcie ustanawiania. Jest to dobre dla aplikacji, które muszą robić cokolwiek związanego z siecią poza odczytem lub zapisem danych. W przypadku tych ostatnich zadzwońisConnected()
zamiast tego, co gwarantuje, że sieć jest w pełni użyteczna.Poniższy kod (w Kotlinie) działa od API 21 do co najmniej bieżącej wersji API (API 29). Funkcja getWifiState () zwraca jedną z 3 możliwych wartości stanu sieci Wi-Fi: Disable, EnabledNotConnected i Connected, które zostały zdefiniowane w klasie enum. Umożliwia to podejmowanie bardziej szczegółowych decyzji, takich jak poinformowanie użytkownika o włączeniu Wi-Fi lub, jeśli jest już włączone, o połączeniu się z jedną z dostępnych sieci. Ale jeśli wszystko, co jest potrzebne, to wartość logiczna wskazująca, czy interfejs WiFi jest podłączony do sieci, wtedy inna funkcja isWifiConnected () da ci to. Wykorzystuje poprzedni i porównuje wynik z połączonym.
Jest inspirowany niektórymi wcześniejszymi odpowiedziami, ale próbuje rozwiązać problemy związane z ewolucją interfejsów API Androida lub powoli rosnącą dostępnością IP V6. Sztuką było użycie:
zamiast:
Zgodnie z dokumentacją: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid zwróci wartość null, jeśli nie zostanie podłączony do sieci. I nawet jeśli nie mamy pozwolenia na uzyskanie rzeczywistej wartości, nadal będzie zwracać coś innego niż zero, jeśli będziemy połączeni.
Pamiętaj również o następujących kwestiach:
W Manifeście nie zapomnij dodać:
Proponowany kod to:
źródło
NetworkInfo
Klasa jest przestarzałe jak API poziomu 29, wraz z powiązanymi metod dostępu, jakConnectivityManager#getNetworkInfo()
iConnectivityManager#getActiveNetworkInfo()
.Dokumentacja teraz sugeruje ludzi do korzystania z
ConnectivityManager.NetworkCallback
API dla monitorowania niesynchroniczne zwrotnej lub wykorzystaniaConnectivityManager#getNetworkCapabilities
lubConnectivityManager#getLinkProperties
do zsynchronizowanego dostępu informacji o sieciAby sprawdzić, czy WiFi jest podłączone, oto kod, którego używam:
Kotlin:
Jawa:
Pamiętaj, aby również dodać uprawnienia
ACCESS_NETWORK_STATE
do pliku manifestu.źródło
Wypróbuj tę metodę.
Ta metoda pomoże znaleźć połączenie internetowe dostępne lub nie.
źródło
To działa dla mnie:
I dodaj to uprawnienie:
źródło
Wiele odpowiedzi używa przestarzałego kodu lub kodu dostępnego w wyższych wersjach API. Teraz używam czegoś takiego
źródło
Oto, czego używam jako metody narzędzia w moich aplikacjach:
źródło
W nowej wersji Androida
i dodaj też premię
źródło
connManager.getAllNetworks()
wymaga interfejsu API na poziomie 21.Podobne do odpowiedzi @Jason Knight, ale w sposób Kotlina:
źródło
ConnectivityManager.TYPE_WIFI
jest przestarzałeTo jest łatwiejsze rozwiązanie. Zobacz pytanie Przepełnienie stosu Sprawdzanie Wi-Fi włączonego lub nie w systemie Android .
PS Nie zapomnij dodać kodu do pliku manifest.xml, aby zezwolić na pozwolenie. Jak pokazano niżej.
źródło
Próbować
Zwraca 0, dopóki urządzenie nie będzie mieć dostępnego połączenia (na moim komputerze, Samsung SM-T280, Android 5.1.1).
źródło
Możesz włączyć WIFI, jeśli nie jest aktywowane w następujący sposób: 1. sprawdź stan WIFI zgodnie z odpowiedzią @Jason Knight 2. jeśli nie jest aktywowany, aktywuj go, nie zapomnij dodać uprawnienia WIFI do pliku manifestu
Twoja klasa Java powinna być taka
}
źródło
Dodaj to dla JAVA:
w pliku manifestu dodaj następujące uprawnienia:
źródło
To trochę stare pytanie, ale tego właśnie używam. wymaga poziomu min api 21, bierze również pod uwagę przestarzałe Networkinfo apis.
źródło