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)
- Comprobación de Wi-Fi activado o no en Android
- Cómo enviar un archivo de android a la impresora wifi programatically e imprimir el archivo?
- ADB, Wifi y Eclipse: ¿cómo puedo configurar?
- Cómo obtener la dirección MAC en Android 6.0
- Android móvil no detectar la red inalámbrica creada en mi portátil
=> 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.
- Android: Determinar el tipo de seguridad de las redes wifi en el rango (sin conectarse a ellos)
- Diferencia entre getConnectionInfo () y getScanResults () para detectar cambios de intensidad de señal
- Error de autenticación Wifi en Android
- Java.net.SocketException: recvfrom falló: ECONNRESET (Conexión restablecida por pares) Más de WIFI
- ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
- Cómo enviar MAC marco de datos de difusión con Android AP
- Escaneado Wi-Fi sin receptor de difusión?
- Construir una configuración Wifi desde un ScanResult o: Interpretar la cadena 'capabilities' de ScanResult
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
- Cifrar con Node.js módulo Crypto y descifrar con Java (en la aplicación de Android)
- ¿Puedo tener una actividad de Android ejecutada sólo la primera vez que se abra una aplicación?