Wykrywanie ograniczonej łączności sieciowej w systemie Android?

Istnieje wiele pytań dotyczących wykrywania połączeń sieciowych w Androidzie.https://stackoverflow.com/a/4239019/90236 zapewnia bardzo szczegółową odpowiedź ihttps://stackoverflow.com/a/8548926/90236 pokazuje metody identyfikacji typu sieci, do której jest podłączony.

Wykrywamy łączność sieciową za pomocą kodu podobnego do tych jak:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

To pozwala nam ostrzec użytkownika, jeśli jest offline. Jednak nie pomaga nam określić, czy użytkownik ma ograniczoną łączność. Istnieją warunki ograniczonej łączności, które spowodowały, że użytkownicy narzekają. Obejmują one:

Użytkownicy są podłączeni do domowej sieci Wi-Fi, ale modem kablowy lub usługa internetowa są niedostępne.

Użytkownicy znajdują się w hotelu lub kawiarni i z powodzeniem łączą się z siecią Wi-Fi, ale sieć wymaga zalogowania się lub zaakceptowania warunków korzystania z usługi, zanim otrzymają pełny dostęp do sieci.

W obu tych sytuacjach nasz test isNetworkAvailable () zwraca wartość true. System operacyjny informuje nas, że jesteśmy połączeni z siecią. Jednak użytkownik nie ma użytecznej łączności z Internetem.

Czy istnieje dobry sposób na ustalenie, że użytkownik ma w pełni działające połączenie sieciowe?

Rozważam wywołanie lekkiej usługi internetowej, aby zweryfikować ich łączność i ostrzec użytkownika, jeśli aplikacja nie uzyska prawidłowego zwrotu z usługi. Czy to przesada? czy inni musieli uciekać się do podobnych technik?

questionAnswers(2)

yourAnswerToTheQuestion