2012-04-17 12 views
7

Moja aplikacja najpierw ładuje dane z Internetu (korzystam z usługi internetowej) Chcę sprawdzić dostęp do Internetu przy starcie aplikacji.Jak sprawdzić, czy dostęp do Internetu jest dostępny podczas uruchamiania aplikacji w systemie Android?

  1. Chciałbym sprawdzić, czy dostępne są jakieś formy internetu 3G, WIFI, GPRS lub jakiekolwiek inne.
  2. Jeśli nie jest dostępna, daj wiadomość użytkownikowi "Potrzebujesz dostępu do Internetu" i zamknij aplikację. (Obecnie nie otrzymuję bliskiego błędu w mojej aplikacji, jeśli nie ma dostępu do Internetu)
  3. Jeśli jest dostępna, uruchom normalnie moją aplikację.
  4. Ponadto moja aplikacja pobiera dane z usługi sieciowej w innej fazie, przed każdą fazą lub operacją, na początku chciałbym sprawdzić dostęp do Internetu.

Jak to zrobić?

+2

patrz na przykład http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts dla poprzednich odpowiedzi. – mlc

Odpowiedz

7

Można używać metody:

public static boolean isNetworkAvailable(Context context) 
{ 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (connectivity != null) 
    { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 

     if (info != null) 
     { 
      for (int i = 0; i < info.length; i++) 
      { 
       Log.i("Class", info[i].getState().toString()); 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) 
       { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

Thanx! działa !!! – captaindroid

+0

Cieszę się, że to pomaga .. :) – dreamcoder

+0

jeśli mam połączenie WiFi bez połączenia z Internetem, to kod zwraca true. masz jakieś zastępcze do tego? –

3

Możesz zrobić to wszystko za pomocą ConnectivityManager. Wszystkie wymagane informacje są dostępne tutaj

http://developer.android.com/reference/android/net/ConnectivityManager.html

Prawdopodobnie chcesz trzymać coś takiego w sposobie swojej początkowej aktywności onStart() (w zależności od tego, gdzie w kodzie połączenie jest rozgrzana, a dane są pobierane)

ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE); 

if (cm.getAllNetworkInfo().isConnected()) { 
//proceed with loading 
} else { 
//showErrorDialog 
} 

nie testowałem kod Te więc wycinanie i wklejanie jest chyba zły pomysł, ale to powinno dać dobry punkt wyjścia. Istnieje wiele innych informacji, jeśli sprawdzisz dokumenty.

Być może warto poradzić sobie z brakiem łączności, zmieniając kod, aby nie popsuł się tylko wtedy, gdy nie ma połączenia, czy domyślne ekrany ładowania są wyświetlane domyślnie? Również Twoja aplikacja może nie uzyskać danych, nawet jeśli jest dostępne połączenie, więc zechcesz również obsłużyć ten scenariusz.

1
NetworkInfo i = conMgr.getActiveNetworkInfo(); 
    if (i == null) 
    return false; 
    if (!i.isConnected()) 
    return false; 
    if (!i.isAvailable()) 
    return false; 
    return true; 
Powiązane problemy