Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ANDROID: si WiFi está habilitado Y activo, inicia una intención

Esto es lo que me gustaría hacer:

=> SI WiFi está habilitado Y activo, inicia una intención (de hecho es un WebView que recibe su contenido => las instrucciones de mi aplicación en la web)

=> SI NO, entonces lanzaría otra intención de modo que no muestre un WebView con "la página Web no disponible … La página Web en http://www.mywebsite.com podría estar temporalmente abajo o puede tener movido …"

Primero he usado

if (wifi.isWifiEnabled ())

pero eso no dice si la conexión Wifi es ACTIVO o no. Sólo dice que el usuario ha encendido el interruptor. El dispositivo puede o no estar conectado … ¿Es correcto?

Entonces intenté usar:

if (wifi.getConnectionInfo (). getSSID ()! = null)

pero me di cuenta de que devuelve una cadena incluso si la conexión se ha perdido o se ha deshabilitado …?

¿Cómo debo hacer entonces?

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); Intent intent_instructions; if (wifi.getConnectionInfo().getSSID()!= null){ Log.i("Hub", "WiFi is enabled AND active !"); Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID()); intent_instructions = new Intent(this, Instructions.class); }else{ Log.i("Hub", "NO WiFi"); intent_instructions = new Intent(this, Instructions_No_WiFi.class); } this.startActivity(intent_instructions); 

¿Existe una manera más general de probar si el dispositivo tiene la conectividad a Internet justo antes de lanzar una intención? ya sea a través de Wifi, 3G, etc …

Gracias de antemano por tu ayuda.

  • Compartir credenciales Wifi a través de etiqueta NFC sin aplicaciones especiales
  • Conéctese mediante programación a un dispositivo Android en Hotspot portátil
  • Dispositivo inalámbrico ADB no autorizado
  • Solicitar al usuario que active Wi-Fi
  • Acceso a la red cuando el teléfono Android está dormido
  • ¿Cómo me conecto a una red Wi-Fi específica en Android mediante programación?
  • Cómo y qué establecer en Android WifiConfiguration.preSharedKey para conectarse a la red WPA2 PSK WiFi
  • No se puede conectar a Android a través de ADB a través de wifi - ¿Necesito acceso root?
  • 5 Solutions collect form web for “ANDROID: si WiFi está habilitado Y activo, inicia una intención”

    Puede utilizar el código siguiente para comprobar la conectividad:

     private static boolean isConnected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = null; if (connectivityManager != null) { networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); } return networkInfo == null ? false : networkInfo.isConnected(); } 

    Asegúrate de haber registrado la intención de android.net.conn.CONNECTIVITY_CHANGE en tu Manifiesto, o de lo contrario, nunca recibirás una notificación de que estás en línea.

    He estado luchando con este problema durante los últimos días y ahora me di cuenta de que necesitaba registrar CONNECTIVITY_CHANGE y no solo WIFI_STATE_CHANGED.

    Pruebe android.net.ConnectivityManager.getActiveNetworkInfo() : si devuelve null no tiene conexión; si devuelve un objeto NetworkInfo , puede comprobar el estado de la conexión con NetworkInfo.getState() , y si es NetworkInfo.State.CONNECTED entonces estás conectado, de lo contrario no lo eres.

    Puede hacerlo de la siguiente manera:

      @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){ Log.d("WIFI", "WIFI has changed"); int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); Log.d("WIFI", "WIFI State = " + wifiState); setCurrentWifiState(wifiState); } 

    Obtendrá 0,1,2,3 dependiendo de qué estado está el Wifi, por lo que por ejemplo 2 se está conectando, puede comprobar el resto en los documentos

    En su clase BroadcastReceiver:

     @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){ boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); if (connected){ // start your service here } } } 

    Y en tu AndroidManifest.xml asegúrate de registrarte para la intención de difusión de android.net.wifi.supplicant.CONNECTION_CHANGE.

     <intent-filter > <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> </intent-filter> 

    isConnected() no funciona bien, investiga algo más

     final ConnectivityManager connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){ Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); } else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){ Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); } 

    este código comprueba si estás con wifi o 3g o nada, en el caso de wifi en pero no conectado a una red o 3g tienen un problema de señal que detecta estos detalles, con DetailedStates

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.