zistenie, či je v systéme Android k dispozícii internetové pripojenie

Potrebujem zistiť, či je zariadenie so systémom Android pripojené k internetu.

Trieda NetworkInfo poskytuje nestatickú metódu isAvailable(), ktorá znie perfektne.

Problémom je, že:

NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}

vyhodí túto chybu:

The constructor NetworkInfo is not visible.

Vsadíme sa, že existuje iná trieda, ktorá vracia objekt NetworkInfo. Ale neviem, ktorá to je.

  1. Ako dosiahnuť, aby uvedený úryvok kódu fungoval?
  2. Ako som si mohol nájsť potrebné informácie v online dokumentácii?
  3. Môžete navrhnúť lepší spôsob tohto typu detekcie?
Riešenie

Metóda getActiveNetworkInfo() aplikácie ConnectivityManager vráti inštanciu NetworkInfo, ktorá predstavuje prvé pripojené sieťové rozhranie, ktoré nájde, alebo null, ak nie je pripojené žiadne z rozhraní. Kontrola, či táto metóda vráti null, by mala stačiť na zistenie, či je internetové pripojenie k dispozícii alebo nie.

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

Budete tiež potrebovať:

vo vašom android manifeste.

Upraviť:

Upozorňujeme, že existencia aktívneho sieťového rozhrania nezaručuje dostupnosť konkrétnej sieťovej služby. Problémy so sieťou, výpadky servera, slabý signál, skryté portály, filtre obsahu a podobne môžu zabrániť vašej aplikácii dosiahnuť server. Napríklad nemôžete s istotou povedať, či vaša aplikácia môže dosiahnuť Twitter, kým nedostanete platnú odpoveď od služby Twitter.

Komentáre (28)

Ďalšia dôležitá poznámka. Aby to fungovalo, musíte v súbore AndroidManifest.xml nastaviť android.permission.ACCESS_NETWORK_STATE.

_ ako som si mohol nájsť potrebné informácie v online dokumentácii?

Stačí si dostatočne prečítať dokumentáciu tried a nájdete'všetky odpovede, ktoré hľadáte. Pozrite si dokumentáciu k triede ConnectivityManager. V popise sa dozviete, čo máte robiť.

Komentáre (3)

Pravdepodobne som sa našiel:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
Komentáre (5)