Android vérifier la connexion internet [dupliquer]

cette question a déjà une réponse ici:

je veux créer une application qui utilise internet et j'essaie de créer une fonction qui vérifie si une connexion est disponible et si elle n'est pas, allez à une activité qui a un bouton de retouche et une explication.

attaché est mon code jusqu'à présent, mais je reçois l'erreur Syntax error, insert "}" to complete MethodBody.

maintenant j'ai placé ceux-ci dans essayer de le faire fonctionner, mais jusqu'ici pas de chance... Toute aide serait appréciée.

public class TheEvoStikLeagueActivity extends Activity {
    private final int SPLASH_DISPLAY_LENGHT = 3000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        private boolean checkInternetConnection() {
            ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
            // ARE WE CONNECTED TO THE NET
            if (conMgr.getActiveNetworkInfo() != null
                    && conMgr.getActiveNetworkInfo().isAvailable()
                    && conMgr.getActiveNetworkInfo().isConnected()) {

                return true;

                /* New Handler to start the Menu-Activity
                 * and close this Splash-Screen after some seconds.*/
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        /* Create an Intent that will start the Menu-Activity. */
                        Intent mainIntent = new Intent(TheEvoStikLeagueActivity.this, IntroActivity.class);
                        TheEvoStikLeagueActivity.this.startActivity(mainIntent);
                        TheEvoStikLeagueActivity.this.finish();
                    }
                }, SPLASH_DISPLAY_LENGHT);
            } else {
                return false;

                Intent connectionIntent = new Intent(TheEvoStikLeagueActivity.this, HomeActivity.class);
                TheEvoStikLeagueActivity.this.startActivity(connectionIntent);
                TheEvoStikLeagueActivity.this.finish();
            }
        }
    }
165
demandé sur skydroid 2012-03-05 20:30:23

20 réponses

cette méthode vérifie si mobile est connecté à internet et retourne true si connecté:

private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null;
}

dans le manifeste,

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

Edit: Cette méthode vérifie en fait si le périphérique est connecté à internet(il y a une possibilité qu'il soit connecté à un réseau mais pas à internet).

public boolean isInternetAvailable() {
    try {
        InetAddress ipAddr = InetAddress.getByName("google.com"); 
        //You can replace it with your name
            return !ipAddr.equals("");

        } catch (Exception e) {
            return false;
    }
}
327
répondu Seshu Vinay 2018-01-11 21:48:28

assurez-vous qu'il est "connecté" à un réseau:

public boolean isNetworkAvailable(Context context) {
    final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
    return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
}

assurez-vous qu'il est "connecté" à un réseau:

public boolean isInternetAvailable() {
    try {
        final InetAddress address = InetAddress.getByName("www.google.com");
        return !address.equals("");
    } catch (UnknownHostException e) {
        // Log error
    }
    return false;
}

Permission neededed:

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

https://stackoverflow.com/a/17583324/950427

59
répondu Jared Burrows 2017-05-23 11:55:10

vous pouvez simplement tracer un site Web en ligne comme google:

public boolean isConnected() throws InterruptedException, IOException
{
    String command = "ping -c 1 google.com";
    return (Runtime.getRuntime().exec(command).waitFor() == 0);
}
37
répondu razzak 2018-09-13 20:21:08

les méthodes ci-dessus fonctionnent lorsque vous êtes connecté à une source Wi-Fi ou via des paquets de données de téléphone cellulaire. Mais en cas de connexion Wi-Fi Il ya des cas où il vous est demandé de plus de S'inscrire comme dans le café. Donc, dans ce cas, votre application échouera car vous êtes connecté à Wi-Fi source mais pas avec L'Internet.

Cette méthode fonctionne très bien.

    public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        try {
            URL url = new URL("http://www.google.com/");
            HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
            urlc.setRequestProperty("User-Agent", "test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1000); // mTimeout is in seconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return true;
            } else {
                return false;
            }
        } catch (IOException e) {
            Log.i("warning", "Error checking internet connection", e);
            return false;
        }
    }

    return false;

}

s'il vous plaît utilisez ceci dans un thread séparé du thread principal car il fait un appel réseau et lancera Countrokonmainthreadexception si elle n'est pas suivie.

et aussi ne mettez pas cette méthode à l'intérieur onCreate ou toute autre méthode. Mettez-le dans une classe et accédez-y.

21
répondu Bhargav Jhaveri 2014-10-15 12:07:08

L'édition de la réponse acceptée montre comment vérifier si quelque chose sur internet peut être atteint. J'ai dû attendre trop longtemps pour une réponse alors que ce n'était pas le cas (avec un wifi qui n'a pas de connexion internet). Malheureusement InetAddress.getByName n'a pas de paramètre timeout, donc le code suivant fonctionne autour de cela:

private boolean internetConnectionAvailable(int timeOut) {
    InetAddress inetAddress = null;
    try {
        Future<InetAddress> future = Executors.newSingleThreadExecutor().submit(new Callable<InetAddress>() {
            @Override
            public InetAddress call() {
                try {
                    return InetAddress.getByName("google.com");
                } catch (UnknownHostException e) {
                    return null;
                }
            }
        });
        inetAddress = future.get(timeOut, TimeUnit.MILLISECONDS);
        future.cancel(true);
    } catch (InterruptedException e) {
    } catch (ExecutionException e) {
    } catch (TimeoutException e) {
    } 
    return inetAddress!=null && !inetAddress.equals("");
}
15
répondu Hans 2015-12-16 19:48:27

vous ne pouvez pas créer une méthode à l'intérieur d'une autre méthode, déplacer private boolean checkInternetConnection() { méthode hors de onCreate

14
répondu MByD 2012-03-05 16:32:50

vous pouvez utiliser l'extrait suivant pour vérifier la connexion Internet.

il sera utile dans les deux sens que vous pouvez vérifier quel Type de réseau La connexion est disponible, de sorte que vous pouvez faire de votre processus.

vous avez juste à copier la classe suivante et coller directement dans votre paquet.

/**
 * 
 * @author Pratik Butani
 * 
 */
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;
    }
}

Maintenant vous pouvez utiliser comme:

if (InternetConnection.checkConnection(context)) {
    // Its Available...
} else {
    // Not Available...
}

N'OUBLIEZ PAS de PRENDRE l'Autorisation :) :)

<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" />

, Vous pouvez modifier en fonction de vos besoins.

Merci.

13
répondu Pratik Butani 2015-10-21 10:04:58

toutes les méthodes officielles indique seulement si un dispositif est ouvert pour le réseau ou non,

si votre appareil est connecté au Wifi mais que le Wifi n'est pas connecté à internet alors cette méthode échouera (ce qui arrive souvent), aucune méthode de détection réseau intégrée ne parlera de ce scénario, donc créé une classe de rappel Async qui reviendra dans onConnectionSuccess et onConnectionFail

        new CheckNetworkConnection(this, new CheckNetworkConnection.OnConnectionCallback() {

            @Override
            public void onConnectionSuccess() {
   Toast.makeText(context, "onSuccess()", toast.LENGTH_SHORT).show();
            }

            @Override
            public void onConnectionFail(String msg) {
   Toast.makeText(context, "onFail()", toast.LENGTH_SHORT).show();
            }
        }).execute();

Appel du Réseau de async Task

public class CheckNetworkConnection extends AsyncTask<Void, Void, Boolean> {
private OnConnectionCallback onConnectionCallback;
private Context context;

public CheckNetworkConnection(Context con, OnConnectionCallback onConnectionCallback) {
     super();
     this.onConnectionCallback = onConnectionCallback;
    this.context = con;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected Boolean doInBackground(Void... params) {
    if (context == null)
        return false;

    boolean isConnected = new NetWorkInfoUtility().isNetWorkAvailableNow(context);
    return isConnected;
}

@Override
protected void onPostExecute(Boolean b) {
    super.onPostExecute(b);

    if (b) {
        onConnectionCallback.onConnectionSuccess();
    } else {
        String msg = "No Internet Connection";
        if (context == null)
            msg = "Context is null";
        onConnectionCallback.onConnectionFail(msg);
    }

}

public interface OnConnectionCallback {
    void onConnectionSuccess();

    void onConnectionFail(String errorMsg);
}
}

classe actuelle qui sera ping au serveur



class NetWorkInfoUtility {

public boolean isWifiEnable() {
    return isWifiEnable;
}

public void setIsWifiEnable(boolean isWifiEnable) {
    this.isWifiEnable = isWifiEnable;
}

public boolean isMobileNetworkAvailable() {
    return isMobileNetworkAvailable;
}

public void setIsMobileNetworkAvailable(boolean isMobileNetworkAvailable) {
    this.isMobileNetworkAvailable = isMobileNetworkAvailable;
}

private boolean isWifiEnable = false;
private boolean isMobileNetworkAvailable = false;

public boolean isNetWorkAvailableNow(Context context) {
    boolean isNetworkAvailable = false;

    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    setIsWifiEnable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected());
    setIsMobileNetworkAvailable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected());

    if (isWifiEnable() || isMobileNetworkAvailable()) {
        /*Sometime wifi is connected but service provider never connected to internet
        so cross check one more time*/
        if (isOnline())
            isNetworkAvailable = true;
    }

    return isNetworkAvailable;
}

public boolean isOnline() {
    /*Just to check Time delay*/
    long t = Calendar.getInstance().getTimeInMillis();

    Runtime runtime = Runtime.getRuntime();
    try {
        /*Pinging to Google server*/
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        long t2 = Calendar.getInstance().getTimeInMillis();
        Log.i("NetWork check Time", (t2 - t) + "");
    }
    return false;
 }
}
8
répondu Lokesh Tiwari 2018-02-26 00:47:52

Pas besoin d'être complexe. La manière la plus simple et framework est d'utiliser ACCESS_NETWORK_STATE permission et juste faire une méthode connectée

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

vous pouvez également utiliser requestRouteToHost si vous avez un hôte particulier et le type de connexion (wifi/mobile) à l'esprit.

vous aurez aussi besoin de:

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

dans votre manifeste androïde.

pour plus de détails allez ici

7
répondu Xar E Ahmer 2017-05-23 11:47:25

utiliser cette méthode:

public static boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}

C'est l'autorisation nécessaire:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6
répondu Iman Marashi 2015-12-19 15:39:49

essayez le code suivant:

public static boolean isNetworkAvailable(Context context) {
        boolean outcome = false;

        if (context != null) {
            ConnectivityManager cm = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo[] networkInfos = cm.getAllNetworkInfo();

            for (NetworkInfo tempNetworkInfo : networkInfos) {


                /**
                 * Can also check if the user is in roaming
                 */
                if (tempNetworkInfo.isConnected()) {
                    outcome = true;
                    break;
                }
            }
        }

        return outcome;
    }
4
répondu Praful Bhatnagar 2012-03-05 16:58:01

dans le manifeste

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

en code,

public static boolean isOnline(Context ctx) {
    if (ctx == null)
        return false;

    ConnectivityManager cm =
            (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}
3
répondu R00We 2014-12-30 07:59:14

après l'instruction" return", vous ne pouvez pas écrire de code(à l'exclusion du bloc "try-finally"). Déplacez vos nouveaux codes d'activité avant les énoncés "retour".

2
répondu Burhan ARAS 2013-05-28 13:09:53
public boolean checkInternetConnection(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) {
        return false;
    } else {
        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;
}
2
répondu Ashish Saini 2014-06-07 09:08:38

utilisez ce code pour vérifier la connexion internet

ConnectivityManager connectivityManager = (ConnectivityManager) ctx
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if ((connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED)
                || (connectivityManager
                        .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager
                        .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                        .getState() == NetworkInfo.State.CONNECTED)) {
            return true;
        } else {
            return false;
        }
2
répondu Fahim 2015-03-17 12:29:13

Voici une fonction que j'utilise dans ma classe Utils :

public static boolean isNetworkConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return (cm.getActiveNetworkInfo() != null) && cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

utiliser comme: Utils.isNetworkConnected(MainActivity.this);

1
répondu Mahendra Liya 2014-05-22 05:26:47

1 - créer un nouveau fichier java (clic droit sur le paquet. nouveau > classe > nom du fichier ConnectionDetector.java

2-ajouter le code suivant au fichier

<pre>package <add you package name> example com.example.example;

import android.content.Context;
import android.net.ConnectivityManager;

public class ConnectionDetector {

    private Context mContext;

    public ConnectionDetector(Context context){
        this.mContext = context;
    }

    public boolean isConnectingToInternet(){

        ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected() == true)
        {
            return true; 
        }

        return false;

    }
}

3-Ouvrez votre MainActivity.java - l'activité où vous voulez vérifier la connexion, et faire ce qui suit

a-créer et définir la fonction.

<pre>ConnectionDetector mConnectionDetector;</pre>

B - à l'intérieur du" OnCreate " ajouter le suivant

<pre>mConnectionDetector = new ConnectionDetector(getApplicationContext());</pre>

C - pour vérifier la connexion, suivre les étapes suivantes

<pre> if (mConnectionDetector.isConnectingToInternet() == false) {
//no connection- do something
} else {
//there is connection
}</pre>
1
répondu Bahi Hussein 2014-08-30 23:41:35

j'ai eu des problèmes avec la réponse Isinternet disponible ne pas tester pour les réseaux cellulaires, plutôt que si wifi était connecté. Cette réponse fonctionne à la fois pour le wifi et les données mobiles:

Comment vérifier que la connexion réseau est activée ou désactivée dans WIFI et 3G(data plan) dans mobile?

1
répondu RedPanda 2017-05-23 11:47:25

c'est l'autre option pour gérer toute situation:

public void isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
    } else {
        Toast.makeText(ctx, "Internet Connection Is Required", Toast.LENGTH_LONG).show();

    }
}
1
répondu Zafer Celaloglu 2014-12-23 14:48:58

vérifier réseau disponible sur android avec la vitesse de données internet.

public boolean isConnectingToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) Login_Page.this.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)
                      {
                          try
                            {
                                HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
                                urlc.setRequestProperty("User-Agent", "Test");
                                urlc.setRequestProperty("Connection", "close");
                                urlc.setConnectTimeout(500); //choose your own timeframe
                                urlc.setReadTimeout(500); //choose your own timeframe
                                urlc.connect();
                                int networkcode2 = urlc.getResponseCode();
                                return (urlc.getResponseCode() == 200);
                            } catch (IOException e)
                            {
                                return (false);  //connectivity exists, but no internet.
                            }
                      }

          }
          return false;
    }

cette fonction retourne vrai ou faux. Doit obtenir la permission de l'utilisateur

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1
répondu Md Imran Choudhury 2015-04-15 07:25:33