Comment 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 d’avoir une connexion Wi-Fi. Cependant, je ne peux que sembler être en mesure 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 à quoi je m’attendais. Même si le Wi-Fi est connecté, je OBTAINING_IPADDR tant qu’état.

Vous devriez pouvoir utiliser le ConnectivityManager pour obtenir l’état de l’adaptateur Wi-Fi. De là, vous pouvez vérifier s’il est connecté 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 append

  

à ton

AndroidManifest.xml pour que cela fonctionne.

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

Cette méthode est devenue obsolète au niveau 23 de l’API. 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).

Comme 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 activé et également connecté à un point d’access à l’aide de 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 } } 

J’utilise simplement ce qui suit:

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

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

ASSOCIÉ – Association terminée.

ASSOCIATING – Essayer d’associer à un point d’access.

COMPLETED – Toutes les authentifications sont terminées.

DISCONNECTED – Cet état indique que le client n’est pas associé, mais est susceptible de rechercher un point d’access.

DORMANT – Un état ajouté à Android qui est signalé lorsqu’un client émet une commande DISCONNECT explicite.

FOUR_WAY_HANDSHAKE – WPA 4-Way Key Handshake en cours.

GROUP_HANDSHAKE – Wha Group Key Handshake en cours.

INACTIVE – Etat inactif.

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

SCANNING – Recherche d’un réseau.

UNINITIALIZED – Pas de connexion.

J’ai jeté un coup d’œil à 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 cela semble fonctionner correctement.

Je l’utilise dans mes applications pour vérifier si le réseau actif est le 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 } 

Bien que la réponse de Jason soit correcte, getNetWorkInfo (int) est aujourd’hui une méthode obsolète. Donc, 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; } 

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 lorsqu’elle n’est pas connectée à un réseau;

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

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.

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:

   

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

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 append aussi la prémission

C’est une solution plus facile. Voir la question sur le débordement de stack Vérification du Wi-Fi activé ou non sur Android .

PS N’oubliez pas d’append le code au fichier manifest.xml pour autoriser l’autorisation. Comme indiqué ci-dessous.

       

Essayer

 wifiManager.getConnectionInfo().getIpAddress() 

Cela renvoie 0 jusqu’à ce que le périphérique dispose d’une connexion utilisable (sur ma machine, un Samsung SM-T280, Android 5.1.1).

Vous pouvez activer le WIFI s’il n’est pas activé de la manière suivante: 1. Vérifiez l’état du WIFI en répondant à @Jason Knight 2. S’il n’est pas activé, activez-le. N’oubliez pas d’append la permission WIFI dans le fichier manifeste

  

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

}