2014-09-05 18 views
5

Sto lavorando a un'applicazione galleria di immagini, in cui l'applicazione sta recuperando le immagini da internet.chiedere all'utente di connettersi a Internet o chiudere l'app (android)

quindi voglio richiedere una finestra di dialogo per chiedere all'utente di connettersi a Internet o chiudere l'applicazione.

mostra all'utente sia l'opzione di rete WiFi che di rete.

+0

Semplice come è, basta controllare se c'è una connessione di rete attiva. In caso contrario, mostra una finestra di dialogo Sì | no. Se positivo, quindi mostra le impostazioni di rete. Altrimenti, finisci l'attività. –

risposta

5

questa verifica per entrambi Wi-Fi e dati mobili .. codice su splash o attività principale per verificare la connessione di rete.popificare la finestra di dialogo se la rete non è connessa e terminare l'attività.È così semplice

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; 
} 
+0

Che cosa succede se voglio verificare la connessione a Internet in ogni frammento (in altre parole, in ciascuna pagina dell'interfaccia utente). Diciamo che prima faccio clic sull'immagine e vedo l'immagine grande, ma ora se la connessione internet è persa, dovrei avvisare l'utente. Dove posizionare questo codice, in modo da controllare la connettività Internet in tutte le schermate? – user3705478

+0

crea una comune classe util e accedi da lì. Inoltre puoi creare una trasmissione e ascoltare la modifica della rete ovunque tu voglia. –

2

In primo luogo si dovrebbe verificare se siano già collegati o no (tonnellate di esempi come fare questo in linea)

In caso contrario, quindi utilizzare questo codice

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Connect to wifi or quit") 
.setCancelable(false) 
.setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
    } 
}) 
.setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     this.finish(); 
    } 
}); 
AlertDialog alert = builder.create(); 
alert.show(); 
1
//Checking For Internet Connection 
ConnectionDetector cd = new ConnectionDetector(getApplicationContext()); 

    // Check if Internet present 
    if (!cd.isConnectingToInternet()) { 
     // Internet Connection is not present 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Connect to wifi or quit") 
     .setCancelable(false) 
     .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int id) { 
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
       } 
     }) 
     .setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       this.finish(); 
     } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 

    return; 
    } 
+1

Dovremmo combinare le nostre risposte lol – MobileMon

+0

stavo pensando allo stesso modo .... Lol .. –

4

Prova questa:

public static boolean isConnected(Context context){ 
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if ((wifiInfo != null && wifiInfo.isConnected()) || (mobileInfo != null && mobileInfo.isConnected())) { 
     return true; 
}else{ 
     showDialog(); 
     return false; 
} 

private void showDialog() 
{ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Connect to wifi or quit") 
     .setCancelable(false) 
     .setPositiveButton("Connect to WIFI", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
      } 
     }) 
     .setNegativeButton("Quit", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       this.finish(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
} 
+0

Hai copiato la mia risposta ......... – MobileMon

+0

sì ... una parte di esso ... –

+0

quindi perché non modificare il mio e costruire su di esso? – MobileMon

0

Questo è il modo in cui è fatto.

Questa classe verifica la presenza di una connessione a Internet valida:

public class ConnectionStatus { 

    private Context _context; 

    public ConnectionStatus(Context context) { 
     this._context = context; 
    } 

    public boolean isConnectionAvailable() { 
     ConnectivityManager connectivity = (ConnectivityManager) _context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
         return true; 
        } 
     } 
     return false; 
    } 
} 

Il seguente metodo apre il pannello di connessione wi-fi se non c'è connessione a Internet valida:

public void addListenerOnWifiButton() { 
     Button btnWifi = (Button)findViewById(R.id.btnWifi); 

     iia = new ConnectionStatus(getApplicationContext()); 

     isConnected = iia.isConnectionAvailable(); 
     if (!isConnected) { 
      btnWifi.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); 
        Toast.makeText(getBaseContext(), "Please connect to a hotspot", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
     else { 
      btnWifi.setVisibility(4); 
      warning.setText("This app may use your mobile data to update events and get their details."); 
     } 
    } 

Il seguente metodo apre il 3G pannello se non c'è una connessione internet valida:

public void addListenerOn3GButton() { 
    Button btnThreeGee = (Button)findViewById(R.id.btn3G); 
    iia = new ConnectionStatus(getApplicationContext()); 

    isConnected = iia.isConnectionAvailable(); 
    if (!isConnected) { 
     btnThreeGee.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)); 
      Toast.makeText(getBaseContext(), "Please check 'Data enabled' option", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 
    else { 

     btnThreeGee.setVisibility(4); 
     cont.setVisibility(View.VISIBLE); 
     warning.setText("This app may use your mobile data to update events and get their details."); 
     } 
} 

Spero che questo aiuti :)

+0

Ehi amico, avresti un'idea su come aprire il prompt delle impostazioni di roaming dati come un tipo di dialogo abilitare/disabilitare simile a quello del prompt Bluetooth/GPS? La tua risposta funziona bene ma apre una nuova attività invece di una piccola finestra di dialogo che compromette l'esperienza dell'utente. – Razgriz

+0

Penso che [questa] (http://stackoverflow.com/a/15456565/1116216) risposta ti aiuterà a ottenere ciò di cui hai bisogno. –

+1

Quello che intendevo era che apparisse una finestra di dialogo e facendo clic su OK/Sì/etc si accenderanno automaticamente i dati mobili. Simile a come ti viene richiesto di attivare il Bluetooth con una finestra di dialogo e se fai clic su Sì, il tuo bluetooth si accenderà automaticamente. O come l'apertura di google maps mostra che "permetti a questa app di usare la tua posizione?" e facendo clic su si abiliteranno le impostazioni di posizione.Non fare clic su Sì e mostrare una nuova attività. – Razgriz