¿Cómo veo si el Wi-Fi está conectado en Android?

No quiero que mi usuario intente descargar algo a menos que tenga conexión Wi-Fi. Sin embargo, parece que solo puedo decir si el Wi-Fi está habilitado, pero aún podrían tener una conexión 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; } 

Sin embargo, el estado no es lo que esperaría. Aunque Wi-Fi está conectado, OBTAINING_IPADDR como estado.

    Debería poder utilizar ConnectivityManager para obtener el estado del adaptador de Wi-Fi. Desde allí puede verificar si está conectado o si está disponible .

     ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { // Do whatever } 

    NOTA: debe tenerse en cuenta (para nosotros n00bies aquí) que necesita agregar

      

    para usted

    AndroidManifest.xml para que esto funcione.

    NOTA 2 : la red public NetworkInfo getNetworkInfo (int networkType) ahora está en desuso:

    Este método quedó obsoleto en el nivel de API 23. Este método no es compatible con múltiples redes conectadas del mismo tipo. Use getAllNetworks () y getNetworkInfo (android.net.Network) en su lugar.

    Dado que el método NetworkInfo.isConnected () ahora está en desuso en API-23 , aquí hay un método que detecta si el adaptador Wi-Fi está activado y también está conectado a un punto de acceso usando 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 } } 

    Simplemente uso lo siguiente:

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

    Que devolverá uno de estos estados en el momento en que llame a getSupplicantState ();

    ASOCIADO – Asociación completa.

    ASOCIACIÓN – Intenta asociarse con un punto de acceso.

    COMPLETADO – Toda autenticación completa.

    DESCONECTADO: este estado indica que el cliente no está asociado, pero es probable que comience a buscar un punto de acceso.

    DORMANTE: un estado agregado por Android que se informa cuando un cliente emite un comando DISCONNECT explícito.

    FOUR_WAY_HANDSHAKE – WPA Apretón de teclas de 4 vías en progreso.

    GROUP_HANDSHAKE – WPA Group Key Handshake en progreso.

    INACTIVO – Estado inactivo.

    NO VÁLIDO – Un pseudo-estado que normalmente nunca debería ser visto.

    ESCANEADO – Escaneo en busca de una red.

    SIN IDENTIFICAR – Sin conexión.

    Eché un vistazo a algunas preguntas como esta y se me ocurrió esto:

     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 } 

    Utilizo para mi licencia comprobar en Root Toolbox PRO, y parece funcionar muy bien.

    Estoy usando esto en mis aplicaciones para verificar si la red activa es 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 } 

    Si bien la respuesta de Jason es correcta, hoy getNetWorkInfo (int) es un método obsoleto. Entonces, la siguiente función sería una buena alternativa:

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

    Usando WifiManager puedes hacer:

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

    El método getNeworkId devuelve -1 solo cuando no está conectado a una red;

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

    Prueba este método.

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

    Este método ayudará a encontrar la conexión a Internet disponible o no.

    Esto funciona para mí:

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

    Y agrega este permiso:

       

    Esto es lo que uso como un método de utilidad en mis aplicaciones:

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

    En la nueva versión de 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 } } } } 

    y agregar la premisión también

    Esta es una solución más fácil. Consulte Pregunta de desbordamiento de stack Comprobación de Wi-Fi activado o no en Android .

    PD No se olvide de agregar el código al archivo manifest.xml para permitir el permiso. Como se muestra abajo.

           

    Tratar

     wifiManager.getConnectionInfo().getIpAddress() 

    Esto devuelve 0 hasta que el dispositivo tenga una conexión utilizable (en mi máquina, una Samsung SM-T280, Android 5.1.1).

    Puede activar WIFI si no está activado, como por ejemplo 1. Verifique el estado de WIFI como lo indica @Jason Knight 2. Si no está activado, actívelo, no olvide agregar el permiso de WIFI en el archivo de manifiesto.

      

    Tu clase de Java debería ser así

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

    }