Wifi Connect-Desconectar de escucha

¿Qué oyente mi clase tiene que implementar para verificar automáticamente el código si el wifi se conecta / desconecta?

Puedo comprobar manualmente para la conexión wifi / la desconexión pero cada vez que necesito conectar / desconectar WIFI de ajustes del androide y después funcionar mi programa para el resultado.

Por favor ayuda. Thanx por adelantado.

Mi código actual es tan simple como:

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()==true) { tv.setText("You are connected"); } else { tv.setText("You are NOT connected"); } 

5 Solutions collect form web for “Wifi Connect-Desconectar de escucha”

En realidad, está comprobando si Wi-Fi está habilitado , eso no significa necesariamente que esté conectado . Simplemente significa que el modo Wi-Fi en el teléfono está habilitado y es capaz de conectarse a redes Wi-Fi.

Así es como estoy escuchando las conexiones reales de Wi-Fi en mi receptor de difusión:

 public class WifiReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMan.getActiveNetworkInfo(); if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) Log.d("WifiReceiver", "Have Wifi Connection"); else Log.d("WifiReceiver", "Don't have Wifi Connection"); } }; 

Para acceder a la información de red activa, debe agregar los siguientes usos: permiso a su AndroidManifest.xml:

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

Y el siguiente receptor intención (o podría agregar esto de forma programática …)

 <!-- Receive Wi-Fi connection state changes --> <receiver android:name=".WifiReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

EDIT: En Lollipop, Job Scheduling puede ayudar si está buscando realizar una acción cuando el usuario se conecta a una conexión de red sin medir. Echa un vistazo: http://developer.android.com/about/versions/android-5.0.html#Power


EDIT 2: Otra consideración es que mi respuesta no comprueba que tiene una conexión a Internet . Podrías estar conectado a una red Wi-Fi que requiere que inicies sesión. He aquí un útil "IsOnline ()" check: https://stackoverflow.com/a/27312494/1140744

Crea tu propia clase que extiende BroadcastReceiver …

 public class MyNetworkMonitor extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Process the Intent here } } 

En AndroidManifest.xml

 <receiver android:name=".MyNetworkMonitor" > <intent-filter> <action android:name="android.net.wifi.STATE_CHANGE" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

Consulte WIFI_STATE_CHANGED_ACTION y CONNECTIVITY_ACTION para obtener una explicación sobre el uso del intento.

Echa un vistazo a estas dos páginas de javadoc: ConnectivityManager WiFiManager

Observe que cada uno define acciones de difusión. Si necesita saber más sobre el registro de receptores de difusión, compruebe esto: Registre programaticamente un receptor de difusión

 BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()) { tv.setText("You are connected"); } else { tv.setText("You are NOT connected"); } } }; 

Y en su manifiesto podría hacer algo como esto (si prefiere no registrar el receptor en código):

 <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:name=".WiFiReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> </intent-filter> </receiver> </application> 

EDITAR:

Debo agregar que sería mejor registrar este receptor de la difusión en su código algo que en el manifiesto si usted necesita solamente recibir la difusión mientras que la aplicación está funcionando. Al especificarlo en el manifiesto su proceso será notificado de un cambio de conexión incluso cuando no se estaba ejecutando anteriormente.

En AndroidManifest.xml agregue el siguiente permiso.

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

Cree una nueva clase de receptor.

 public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { Toast.makeText(context, "Wifi Connected!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "Wifi Not Connected!", Toast.LENGTH_SHORT).show(); } } 

Y agrega esa clase de receptor al archivo AndroidManifest.xml .

 <receiver android:name="ConnectionChangeReceiver" android:label="NetworkConnection"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> 

En respuesta a sabsab. Para enganchar en el receptor de la difusión de la conmutación de la conexión utilicé la respuesta de warbi y agregué una clase con los métodos estáticos.

 public class WifiHelper { private static boolean isConnectedToWifi; private static WifiConnectionChange sListener; public interface WifiConnectionChange { void wifiConnected(boolean connected); } /** * Only used by Connectivity_Change broadcast receiver * @param connected */ public static void setWifiConnected(boolean connected) { isConnectedToWifi = connected; if (sListener!=null) { sListener.wifiConnected(connected); sListener = null; } } public static void setWifiListener(WifiConnectionChange listener) { sListener = listener; } } 

Luego hice cambios en la clase del receptor en la primera respuesta mostrada arriba.

 public class ConnectivityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMan.getActiveNetworkInfo(); if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) { Log.d("WifiReceiver", "Have Wifi Connection"); WifiHelper.setWifiConnected(true); } else { Log.d("WifiReceiver", "Don't have Wifi Connection"); WifiHelper.setWifiConnected(false); } } } 

Por último, en su actividad puede agregar un oyente para utilizar esta devolución de llamada.

 wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); wasWifiEnabled = (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED || wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING); WifiHelper.setWifiListener(new WifiHelper.WifiConnectionChange() { @Override public void wifiConnected(boolean connected) { //Do logic here } }); 

Observe que el oyente se elimina después de que se activa la devolución de llamada, esto se debe a que es un detector estático. De todos modos esta implementación funciona para mí y es una forma de enganchar en su actividad, o en cualquier lugar le da estática.

  • Compartir imágenes desde un dispositivo Android a otro a través de WiFi
  • Hotspot multiplexado en Android
  • Descubrir dispositivos móviles usando wifi
  • ¿Cómo comprobar si un dispositivo androide está equipado con un adaptador wifi?
  • Android: comprueba si la contraseña del wifi es correcta
  • Cómo detener la exploración wifi en Android?
  • Habilitación de WiFi en el emulador de Android
  • Android activar / desactivar WiFi HotSpot mediante programación
  • Android 6.0 comprueba si está conectado a una red Wi-Fi (sin Internet)
  • ¿Cómo crear un GO autónomo para Wifi Direct en Android con ssid dedicado y contraseña?
  • Compruebe la disponibilidad de la red wifi oculta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.