web-dev-qa-db-fra.com

Comment voir si le Wi-Fi est connecté sur Android?

Je ne veux même pas que mon utilisateur essaie de télécharger quelque chose à moins qu'il soit connecté au Wi-Fi. Cependant, je peux seulement sembler être capable de dire si le Wi-Fi est activé, mais ils pourraient toujours avoir une connexion 3G.

Android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
Android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

Cependant, l'état n'est pas ce que j'attendais. Même si le Wi-Fi est connecté, je reçois OBTAINING_IPADDR comme état.

230
schwiz

Vous devriez pouvoir utiliser ConnectivityManager pour obtenir l'état de l'adaptateur Wi-Fi. De là, vous pouvez vérifiez si elle est connectée ou même disponible .

_ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}
_

NOTE: Il convient de noter (pour nous n00bies ici) que vous devez ajouter

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

à ton

AndroidManifest.xml pour que cela fonctionne.

NOTE2 : public NetworkInfo getNetworkInfo (int networkType) est maintenant obsolète:

Cette méthode était obsolète dans l'API de niveau 23. Cette méthode ne prend pas en charge plusieurs réseaux connectés du même type. Utilisez plutôt getAllNetworks () et getNetworkInfo (Android.net.Network).

NOTE3 : public static final int TYPE_WIFI est maintenant obsolète:

Cette constante était obsolète dans l'API de niveau 28. Les applications devraient plutôt utiliser NetworkCapabilities.hasTransport (int) ou requestNetwork (NetworkRequest, NetworkCallback) pour demander un réseau approprié. pour les transports pris en charge.

457
Jason Knight

Puisque la méthode NetworkInfo.isConnected () est maintenant obsolète dans API-2, voici une méthode qui détecte si l'adaptateur Wi-Fi est connecté et connecté à un point d’accès via WifiManager:

private boolean checkWifiOnAndConnected() {
    WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON

        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

        if( wifiInfo.getNetworkId() == -1 ){
            return false; // Not connected to an access point
        }
        return true; // Connected to an access point
    }
    else {
        return false; // Wi-Fi adapter is OFF
    }
}
66
revolutionary

J'utilise simplement les éléments suivants:

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();

Ce qui renverra l'un de ces états au moment où vous appelez getSupplicantState ();

ASSOCIÉ - Association terminée.

ASSOCIATION - Tentative d'association avec un point d'accès.

COMPLETED - Toute authentification terminée.

DISCONNECTED - Cet état indique que le client n'est pas associé, mais est susceptible de commencer à rechercher un point d'accès.

DORMANT - État ajouté par Android signalé lorsqu'un client émet une commande DISCONNECT explicite.

FOUR_WAY_HANDSHAKE - WPA Clé 4-Way Handshake en cours.

GROUP_HANDSHAKE - WPA Group Key Poignée de main en cours.

INACTIVE - État inactif.

INVALID - Un pseudo-état qui ne devrait normalement jamais être vu.

SCANNING - Numérisation pour un réseau.

NON INITIALISÉ - Pas de connexion.

34
Donal Rafferty

J'utilise ceci dans mes applications pour vérifier si le réseau actif est Wi-Fi:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{

    // Do your work here

}
18
kuchi

J'ai jeté un coup d'œil à quelques questions comme celle-ci et en suis venu à ceci:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isConnected()){
    // If Wi-Fi connected
}

if (mobile.isConnected()) {
    // If Internet connected
}

J'utilise if pour mon contrôle de licence dans Root Toolbox PRO, et cela semble bien fonctionner.

17
LukeMovement

Bien que la réponse de Jason soit correcte, getNetWorkInfo (int) est une méthode obsolète. La prochaine fonction serait donc une alternative intéressante:

public static boolean isWifiAvailable (Context context)
{
    boolean br = false;
    ConnectivityManager cm = null;
    NetworkInfo ni = null;

    cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    ni = cm.getActiveNetworkInfo();
    br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));

    return br;
}
6
Val Martinez

En utilisant WifiManager vous pouvez faire:

WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}

La méthode getNeworkId renvoie -1 uniquement si elle n'est pas connectée à un réseau;

3
razzak
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
                  ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
                    ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
    Toast.makeText(
        getApplicationContext(),
        "Please make sure, your network connection is ON ",
        Toast.LENGTH_LONG).show();
}
else {
    // Put your function() to go further;
}
3
G M Ramesh

Essayez cette méthode.

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

Cette méthode aidera à trouver une connexion Internet disponible ou non.

2
M D

Cela fonctionne pour moi:

    ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

Et ajoutez cette permission:

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

Voici ce que j'utilise comme méthode d'utilitaire dans mes applications:

public static boolean isDeviceOnWifi(final Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mWifi != null && mWifi.isConnectedOrConnecting();
}
1
Mahendra Liya

Semblable à la réponse de @Jason Knight, mais à la manière de Kotlin:

val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)

if (mWifi.isConnected) {
     // Do whatever
}
1
Jerry Chong

Dans la nouvelle version Android

private void getWifiInfo(Context context) {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connManager.getAllNetworks();

    if(networks == null || networks.length == 0)
        return;

    for( int i = 0; i < networks.length; i++) {
        Network ntk = networks[i];
        NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
        if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
                // add some code here
            }
        }

    }
}

et ajouter la permission de

1
Albert Nguyen

C'est une solution plus facile. Voir la question relative au débordement de la pile vérification de l'activation du Wi-Fi ou non sur Android.

P.S. N'oubliez pas d'ajouter le code dans le fichier manifest.xml pour autoriser les autorisations. Comme indiqué ci-dessous.

<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
0
user2715530

Essayer

wifiManager.getConnectionInfo().getIpAddress()

Cela renvoie 0 jusqu'à ce que l'appareil dispose d'une connexion utilisable (sur ma machine, un Samsung SM-T280, Android 5.1.1).

0
Adrian

Vous pouvez activer le WIFI s'il n'est pas activé comme suit: 1. vérifiez l'état du WIFI comme indiqué par @Jason Knight 2. s'il n'est pas activé, activez-le. N'oubliez pas d'ajouter une autorisation WIFI dans le fichier manifeste.

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

Votre classe Java devrait être comme ça

public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //check WIFI activation
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected() == false) {
        showWIFIDisabledAlertToUser();
    }
    else {
        Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
    }
}


private void showWIFIDisabledAlertToUser(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Goto Settings Page To Enable WIFI",
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialog, int id){
                            Intent callGPSSettingIntent = new Intent(
                                    Settings.ACTION_WIFI_SETTINGS);
                            startActivity(callGPSSettingIntent);
                        }
                    });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id){
                    dialog.cancel();
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

}

0
Ahmed Belal

Beaucoup de réponses utilisent du code obsolète, ou du code disponible sur les versions plus avancées de l'API. Maintenant j'utilise quelque chose comme ça

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager != null) {
            for (Network net : connectivityManager.getAllNetworks()) {
                NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
                if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
                    return true;
            }
        }
        return false;
0
Oleg Shevchenko