Detecteren of er een internetverbinding beschikbaar is op Android

Ik moet detecteren of het Android toestel verbonden is met het internet.

De NetworkInfo klasse heeft een niet-statische methode isAvailable() die perfect klinkt.

Het probleem is dat:

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

deze foutmelding geeft:

The constructor NetworkInfo is not visible.

Ik durf te wedden dat er een andere klasse is die een NetworkInfo object retourneert. Maar ik weet niet welke.

  1. Hoe krijg ik de bovenstaande snippet code aan het werk?
  2. Hoe had ik zelf de informatie die ik nodig had in de online documentatie kunnen vinden?
  3. Kunt u een betere manier voorstellen voor dit type detectie?
Oplossing

De getActiveNetworkInfo() methode van ConnectivityManager geeft een NetworkInfo instantie terug die de eerste verbonden netwerkinterface weergeeft die gevonden kan worden of null als geen van de interfaces verbonden is. Door te kijken of deze methode null teruggeeft, kun je zien of er een internetverbinding beschikbaar is of niet.

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

Je hebt ook nodig:

in uw android manifest.

Edit:

Merk op dat het hebben van een actieve netwerkinterface niet'garandeert dat een bepaalde netwerkdienst beschikbaar is. Netwerk problemen, server downtime, laag signaal, captive portals, inhoud filters en dergelijke kunnen allemaal voorkomen dat uw app een server kan bereiken. U kunt bijvoorbeeld niet met zekerheid zeggen of uw app Twitter kan bereiken totdat u een geldige reactie ontvangt van de Twitter-dienst.

Commentaren (28)

Ook een andere belangrijke opmerking. Je moet android.permission.ACCESS_NETWORK_STATE in je AndroidManifest.xml zetten om dit te laten werken.

_ hoe had ik zelf de informatie die ik nodig had in de online documentatie kunnen vinden?

Je hoeft alleen maar de documentatie de klassen goed genoeg te lezen en je'zult alle antwoorden vinden die je zoekt. Kijk eens naar de documentatie over ConnectivityManager. De beschrijving vertelt je wat je moet doen.

Commentaren (3)

Waarschijnlijk heb ik mezelf gevonden:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
Commentaren (5)