web-dev-qa-db-fra.com

Android - Vérifiez par programme la connexion Internet et affichez la boîte de dialogue s'il n'est pas connecté

Je travaille sur un projet live. et lorsque l'utilisateur clique sur l'application. l'écran d'accueil apparaît (il y a une vue Web sur cet écran). et si Internet n'est pas connecté, l'application se bloque. Fondamentalement, mon problème est de vérifier par programme que le mobile est connecté à Internet ou non. sinon, ne récupérez pas les données du service Web dans la vue Web et affichez une boîte de dialogue indiquant "Vérifiez votre connexion Internet"

en faisant des recherches, j'ai trouvé beaucoup de choses, et j'ai essayé de les implémenter. mais, ce n'est pas satisfaisant mon exigence

mon code est,

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

j'appelle cette fonction dans doInBackground() de AsyncTask

Veuillez aider!

22
Java_Android

Enfin, j'ai obtenu la réponse.

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();
}
13
Java_Android

Vous pouvez consulter cette bibliothèque:

https://github.com/novoda/merlin

Vous venez de implement Connectable et vous recevrez un rappel lorsque le réseau tombe en panne ou monte.

Par conséquent, vous pouvez afficher votre boîte de dialogue dans ce scénario.

Vous pouvez également interroger la bibliothèque pour l'état actuel et choisir de ne pas effectuer votre tâche réseau

example

Créer Merlin (en utilisant Merlin.Builder ())

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

Lier et délier le service de votre activité

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

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

S'inscrire aux rappels

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

MerlinActivity dans la démo montre un moyen simple de désencombrer Merlin de votre code d'application principal.

26
Blundell

Vérifier la connexion 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
        }
8

Il s'agit d'une fonction simple qui vérifie votre connexion Internet. Si Connected retourne true sinon false.

 public boolean isInternetOn() {

        // get Connectivity Manager object to check connection
        ConnectivityManager connec =
                (ConnectivityManager) getSystemService(Context.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;
    }
}

Voici un projet qui vérifie la connexion Internet et vérifie également les URL valides ou contenant dans sever this .

6
putulputul
if (InternetConnection.checkConnection(context)) {
    // Internet Available...
} else {
    // Internet Not Available...
}

il suffit de copier sous la classe

public class InternetConnection {

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
    public static boolean checkConnection(Context context) {
        final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();

        if (activeNetworkInfo != null) { // connected to the internet
            Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();

            if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
                return true;
            } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to the mobile provider's data plan
                return true;
            }
        }
        return false;
    }
}

Donner l'autorisation suivante de se manifester

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
2
Makvin

J'ai essayé différentes méthodes décrites ci-dessus, en plus j'ai été pris dans certains cas. Enfin, j'utilise l'extrait de code ci-dessous pour passer un appel réseau ...

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

Cela peut être utile dans de nombreuses perspectives. Si quelque chose ne va pas dans cette approche, faites-le moi savoir.

2
Khan
 public boolean isOnline() {
        NetworkInfo activeNetworkInfo = ((ConnectivityManager) 
        getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        return activeNetworkInfo != null && 
        activeNetworkInfo.isConnectedOrConnecting();
    }
1
Bipin Patel

doInBackground s'exécute sur un thread différent de l'interface utilisateur principale, vous ne pouvez donc pas créer de boîte de dialogue ici. Au lieu de cela, remplacez onPreExecute dans votre AsyncTask, et faites le test là-bas.

0
Phil