Ho bisogno di rilevare se il dispositivo Android è collegato a Internet.
La classe NetworkInfo
fornisce un metodo non statico isAvailable()
che sembra perfetto.
Il problema è che:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
lancia questo errore:
{{{7895014}} lancia un errore: {{7895014}};
The constructor NetworkInfo is not visible.
La scommessa sicura è che c'è un'altra classe che restituisce un oggetto NetworkInfo
. Ma non so quale.
Il metodo getActiveNetworkInfo()
di ConnectivityManager
restituisce un'istanza di NetworkInfo
che rappresenta la prima interfaccia di rete collegata che può trovare o null
se nessuna delle interfacce è collegata. Controllare se questo metodo restituisce null
dovrebbe essere sufficiente per capire se una connessione internet è disponibile o meno.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Avrete anche bisogno di:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
nel tuo manifesto dell'androide.
Modifica:
Si noti che avere un'interfaccia di rete attiva non garantisce che un particolare servizio in rete sia disponibile. Problemi di rete, tempi di inattività dei server, segnale basso, portali vincolati, filtri di contenuto e simili possono impedire alla tua app di raggiungere un server. Per esempio, non puoi dire con certezza se la tua app può raggiungere Twitter finché non ricevi una risposta valida dal servizio Twitter.
Anche un'altra nota importante. Devi impostare android.permission.ACCESS_NETWORK_STATE
nel tuo AndroidManifest.xml perché questo funzioni.
Come avrei potuto trovare le informazioni di cui avevo bisogno nella documentazione online?
Devi solo leggere la documentazione delle classi abbastanza bene e troverai tutte le risposte che stai cercando. Controlla la documentazione su ConnectivityManager. La descrizione ti dice cosa fare.
Probabilmente ho trovato me stesso:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();