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

Je ne veux pas que mon utilisateur essaie même de télécharger quelque chose à moins qu'ils aient Wi-Fi connecté. Cependant, je ne peux que dire si le Wi-Fi est activé, mais ils pourraient encore 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 je m'attends. Même si le Wi-Fi est connecté, je reçois OBTAINING_IPADDR comme l'état.

216
demandé sur Peter Mortensen 2010-10-01 20:51:11

15 réponses

Vous devriez être en mesure d'utiliser le ConnectivityManager pour obtenir l'état de l'adaptateur Wi-Fi. De là, vous pouvez vérifier 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 us n00bies ici) que vous devez ajouter

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

à votre

AndroidManifest.xml pour que cela fonctionne.

NOTE2 : public NetworkInfo getNetworkInfo (int networkType) est maintenant déprécié:

cette méthode a été dépréciée au niveau 23 de L'API. Cette méthode ne permet pas de en charge plusieurs réseaux de même type. Utiliser getAllNetworks () et getNetworkInfo (android.net.Réseau).

437
répondu Jason Knight 2016-09-25 08:40:22

depuis la méthode NetworkInfo.isConnected() est maintenant obsolète dans API-23 , voici une méthode qui détecte si l'adaptateur Wi-Fi est aussi connecté à un point d'accès utilisant WifiManager à la place:

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
    }
}
54
répondu revolutionary 2016-09-25 08:50:55

j'ai simplement utiliser le texte suivant:

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

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

ASSOCIATED-Association completed.

ASSOCIATION Cherche à associer avec un point d'accès.

TERMINÉ Tous authentification compléter.

déconnecté - cet état indique que le client est non associée, mais est susceptible de commencer à chercher un accès point.

DORMANT-un androïde-ajouté l'état que est signalée lorsqu'un client envoie une commande de déconnexion explicite.

FOUR_WAY_HANDSHAKE - WPA 4-Way Key Poignée de main en cours.

GROUP_HANDSHAKE - clé de groupe WPA Poignée de main en cours.

inactif-état inactif.

INVALIDE-A pseudo-état qui devrait normalement jamais être vu.

NUMÉRISATION - Numérisation pour un réseau.

UNINITIALIZED-No connection.

31
répondu Donal Rafferty 2017-03-06 12:09:47

j'ai regardé quelques questions comme celle-ci et j'ai trouvé 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 Si pour ma vérification de licence dans Root Toolbox PRO, et il semble fonctionner très bien.

17
répondu LukeMovement 2016-09-25 08:42:03

j'utilise 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

}
16
répondu kuchi 2016-09-25 08:42:51

alors que la réponse de Jason est correcte, de nos jours getNetWorkInfo (int) est une méthode dépréciée. Ainsi, la prochaine fonction serait une bonne alternative:

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
répondu Val Martinez 2017-05-23 12:02:57

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 seulement quand il n'est pas connecté à un réseau;

3
répondu razzak 2016-09-21 18:25:13
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
répondu G M Ramesh 2016-09-25 08:44:31

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 vous aidera à trouver la connexion internet disponible ou non.

2
répondu M D 2013-12-06 10:58:08

ça marche 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 ajouter cette autorisation:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2
répondu Ahmad 2016-09-25 08:45:42

voici ce que j'utilise comme méthode 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
répondu Mahendra Liya 2015-02-24 05:51:34

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 d'ajouter premission trop

1
répondu Albert Nguyen 2017-02-17 08:13:45

C'est une solution plus facile. Voir Débordement De La Pile question contrôle Wi-Fi activé ou non sur Android .

P. N'oubliez pas d'ajouter le code au manifeste.fichier xml pour permettre l'autorisation. 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
répondu user2715530 2017-05-23 10:31:37

Essayer

wifiManager.getConnectionInfo().getIpAddress()

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

0
répondu Adrian 2016-10-22 21:32:05

vous pouvez activer le WIFI s'il n'est pas activé comme suit 1. vérifier L'état WIFI comme répondu par @Jason Knight 2. si pas activé, activez-le n'oubliez pas d'ajouter la permission 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
répondu Ahmed Belal 2017-01-01 12:19:31