Domanda

ho bisogno di rilevare se il dispositivo Android è connesso a Internet.

La classe NetworkInfo fornisce un metodo isAvailable() non statico che i suoni perfetti.

Il problema è che:

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

getta questo errore:

The constructor NetworkInfo is not visible.
scommessa

Sicuro è che non c'è un'altra classe che restituisce un oggetto NetworkInfo. Ma io non so quale.

  1. Come ottenere il frammento di codice di codice per lavoro?
  2. Come ho potuto ritrovato le informazioni che ho bisogno nella documentazione in linea?
  3. Si può suggerire un modo migliore per questo tipo di rilevamento?
È stato utile?

Soluzione

Il metodo getActiveNetworkInfo() di ConnectivityManager restituisce un'istanza NetworkInfo che rappresenta la prima rete collegata all'interfaccia si può trovare o null se nessuna delle interfacce sono collegati. Verificando questo metodo restituisce null dovrebbe essere sufficiente per dire se una connessione ad internet è disponibile o meno.

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

sarà anche bisogno di te:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

nel manifest Android.

Modifica

Nota che avere un interfaccia di rete attiva non garantisce che un particolare servizio di rete è disponibile. problemi di rete, l'inattività dei server, a basso segnale, portali in cattività, filtra i contenuti e simili possono tutti evitare che la vostra applicazione di raggiungere un server. Per esempio non si può dire con certezza se la vostra applicazione può raggiungere Twitter fino a quando si riceve una risposta valida dal servizio Twitter.

Altri suggerimenti

I check per entrambi Wi-fi e internet mobile come segue ...

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

Ovviamente, si potrebbe facilmente essere modificata per verificare la presenza di singoli tipi di connessione specifici, per esempio, se la vostra applicazione ha bisogno dei potenzialmente più alte velocità del Wi-Fi per funzionare correttamente, ecc.

Passaggio 1: Creare una classe AppStatus nel progetto (si può dare un altro nome anche). Poi si prega di incollare il dato sotto le linee nel codice:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;


public class AppStatus {

    private static AppStatus instance = new AppStatus();
    static Context context;
    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;
    boolean connected = false;

    public static AppStatus getInstance(Context ctx) {
        context = ctx.getApplicationContext();
        return instance;
    }

    public boolean isOnline() {
        try {
            connectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        connected = networkInfo != null && networkInfo.isAvailable() &&
                networkInfo.isConnected();
        return connected;


        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
            Log.v("connectivity", e.toString());
        }
        return connected;
    }
}

Passo 2: Ora, per verificare se la connettività di rete il dispositivo ha poi basta aggiungere questo frammento di codice dove mai si desidera controllare ...

if (AppStatus.getInstance(this).isOnline()) {

    Toast.makeText(this,"You are online!!!!",8000).show();

} else {

    Toast.makeText(this,"You are not online!!!!",8000).show();
    Log.v("Home", "############################You are not online!!!!");    
}

Anche un'altra nota importante. È necessario impostare android.permission.ACCESS_NETWORK_STATE nella vostra AndroidManifest.xml per questo al lavoro.

  

_ come avrei potuto ritrovato le informazioni che ho bisogno nella documentazione in linea?

Non vi resta che leggere la documentazione delle classi abbastanza correttamente e troverai tutte le risposte che cerchi. Controlla la documentazione sul ConnectivityManager . La descrizione si dice cosa fare.

  

Il metodo getActiveNetworkInfo () di ConnectivityManager restituisce una   esempio NetworkInfo rappresenta la prima rete connessa   l'interfaccia si può trovare o null se non se sono collegate le interfacce.   Verificando questo metodo restituisce null dovrebbe essere sufficiente per dire se un   connessione internet è disponibile.

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

sarà anche bisogno di te:

  

nella vostra   Android manifesto.

     

Modifica:

     

Nota che avere un interfaccia di rete attiva non garantisce che un   particolare servizio di rete è disponibile. problemi di reti, server di   i tempi di fermo, segnale basso, portali captive, filtri di contenuto e simili   può impedire che tutto la vostra applicazione di raggiungere un server. Per esempio si   non si può dire con certezza se la vostra applicazione può raggiungere Twitter fino a quando si riceve un   risposta valida dal servizio Twitter.

getActiveNetworkInfo () non dovrebbe mai dare nulla. Non so cosa stavano pensando quando sono venuti su con quello. Si dovrebbe dare un oggetto sempre.

Probabilmente mi sono trovato:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top