13

Sto lavorando a un progetto dal vivo. e quando l'utente fa clic sull'app. appare la schermata di benvenuto (c'è una webview su quello schermo). e se Internet non è collegato, l'app si arresta in modo anomalo. Fondamentalmente, il mio problema è controllare a livello di codice che il cellulare sia connesso a internet o meno. in caso contrario, non recuperare i dati dal webservice in webview e visualizzare una finestra di dialogo che mostra "Verifica la tua connessione Internet"Android - Controlla la connessione a Internet e visualizza la finestra di dialogo se non connesso

mentre facevo ricerche ho trovato molte cose e ho provato a implementarlo. ma, la sua non soddisfacendo la mia richiesta

il mio codice è,

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    else 
    { 
     Description.setVisibility(View.INVISIBLE); 
     new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(
       getResources().getString(
         R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
    } 
    return false; 
} 

sto chiamando questa funzione in doInBackground() di AsyncTask

Please Help!

+0

Questo collegamento internet assegno o connessione wi-fi. Sospetto che quest'ultimo e che la connessione internet possa essere verificata solo da un ping? – carl

risposta

10

Infine, ho ottenuto la risposta.

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conMgr.getActiveNetworkInfo(); 
if (netInfo == null){ 
    Description.setVisibility(View.INVISIBLE); 
    new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(getResources().getString(R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
}else{ 
    dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false); 
    new Welcome_Page().execute(); 
} 
+1

questa non dovrebbe essere la risposta prevista, come tu stesso hai chiesto come verificare la connettività Internet e non la connettività di rete e la risposta sopra mostra quest'ultimo parte – therealprashant

+1

Questa operazione eseguirà Welcome_Page() se il dispositivo è connesso alla rete ma non ha un saldo di dati (Internet) da utilizzare – Khan

0

doInBackground viene eseguito su un thread diverso rispetto all'interfaccia utente principale, quindi non è possibile creare una finestra di dialogo qui. Invece, sostituisci onPreExecute nel tuo AsyncTask e fai il test lì.

+0

il mio codice è giusto o sbagliato? –

+0

@Java_Android mi sembra buono - deve solo essere spostato su un metodo diverso (uno che viene eseguito nel thread dell'interfaccia utente). – Phil

+0

@ Phil..Non funziona in onCreate(). –

-2

Connessione Internet controllare anche nel metodo onCreate() o onResume(). Non è necessario chiamare all'interno di AsyncTask.

oppure è possibile chiamare prima di chiamare l'AsyncTask metodo execute()

if(isOnline) 
{ 
    MyAsyncTask task=new MyAMyAsyncTask(); 
    task.execute(); 

} 

else 
{ 
// no internet connection 
} 
+0

Ho provato entrambi. ma continua a dare errore ... –

+0

Che errore hai quando provi così? –

19

Si potrebbe checkout questa libreria:

https://github.com/novoda/merlin

Basta implement Connectable e si otterrà una richiamata quando la rete scende o si alza.

Pertanto è possibile visualizzare la finestra di dialogo in questo scenario.

È possibile anche interrogare la libreria per lo stato attuale e scegliere di non fare il vostro compito rete

example

Crea Merlin (usando Merlin.Builder())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context); 

Bind e separare il servizio nella tua attività

@Override 
protected void onResume() { 
    super.onResume(); 
    merlin.bind(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    merlin.unbind(); 
} 

Reg. ister per callback

merlin.registerConnectable(new Connectable() { 
     @Override 
     public void onConnect() { 
      // Do something! 
     } 
}); 

Il MerlinActivity all'interno della demo mostra un modo semplice per declutter Merlin dal codice principale dell'applicazione.

+0

Sono estremamente dispiaciuto ... non posso prenderti .. puoi spiegarlo in una forma più semplice ... –

+0

se vai a https://github.com/novoda/merlin e scorri verso il basso, leggi il read me, lo spiega molto semplicemente – Blundell

+0

ok ... grazie. –

5

Questa è una semplice funzione che controlla la connessione Internet. Se Connesso restituisce vero altrimenti falso.

public boolean isInternetOn() { 

     // get Connectivity Manager object to check connection 
     ConnectivityManager connec = 
       (ConnectivityManager) getSystemService(getBaseContext().CONNECTIVITY_SERVICE); 

     // Check for network connections 
     if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || 
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { 


      return true; 

     } else if (
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || 
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { 


      return false; 
     } 
     return false; 
    } 
} 

Ecco un progetto che controlla la connessione internet e controllare anche URL che contengono valido o in sever this.

1

Ho provato diversi metodi descritti sopra, a parte che sono stato catturato in alcuni casi. Così alla fine, sto usando qui sotto frammento di codice per effettuare una chiamata di rete ...

try { 
    InetAddress address = InetAddress.getByName("www.stackoverflow.com"); 
    //Connected to working internet connection 
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
    //Internet not available 
} 

questo può essere utile in molti punti di vista. Se qualcosa non va bene in questo approccio, per favore fatemelo sapere.

1

Controllare il collegamento internet

ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = mgr.getActiveNetworkInfo(); 

     if (netInfo != null) { 
      if (netInfo.isConnected()) { 
       // Internet Available 
      }else { 
       //No internet 
      } 
     } else { 
      //No internet 
     }