Android verificar el estado WIFI (desconectado o el usuario ha cambiado WIFI) ¿Cómo FLAG?

¿Hay una manera de señalar si una conexión de WIFI se desconectó / dejó O si el usuario cambió realmente la red de WIFI?

Necesito que mi aplicación haga: Conectarse a un WIFI XYZ, si XYZ se desconecta (FLAG 1) o se deja caer Luego vuelva a conectar a XYZ. Pero es el cambio del usuario a otro wifi BTOpen (BANDERA 2) entonces permite la conexión y para mi servicio. Si el usuario se conecta de nuevo a XYZ, vuelva a iniciar el bucle.

Lo que conseguí hasta ahora es:

<!-- WIFI Receiver --> <receiver android:name=".ReceiverWifi" > <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> <service android:name=".ServiceWifiMonitor" /> <receiver android:name=".ServiceController" > <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver> 

Receptor de radiodifusión:

  myApplication = (MyApplication) context.getApplicationContext(); conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); networkInfo = conManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); boolean isConnected = networkInfo != null && networkInfo.isConnected(); int reconnectedCount = myApplication.getReconnectedCount(); if (wifiManager.isWifiEnabled()) { if("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) { //Start and Stop Service if(myApplication.isReconnect()) startServiceWifiMonitor(); else stopServiceWifiMonitor(); if (isConnected) { //There is a WIFI Connection myApplication.setConnectedWifi(NetworkUtil.getCurrentSSID(context)); myApplication.setWifiStatus("connected"); if (NetworkUtil.isConnectedToXYZ(context)) { startServiceWifiMonitor(); if(pref.getisFirstTime()) { myApplication.setWifiByChoise("XYZ"); pref.setisFirstTime(false); } else { myApplication.setisReconnect(true); } } else { //Connected to different NetWork if(myApplication.isReconnect() && NetworkUtil.isXYZAvailable(context)) { //ReConnect to XYZ NetworkUtil.connectToXYZ(context); myApplication.setReconnectedCount(reconnectedCount++); } else { resetValues("AAAA"); } } }//end if else { if(NetworkUtil.isXYZAvailable(context) && myApplication.getWifiByChoise().equals("XYZ")) { NetworkUtil.connectToXYZ(context); myApplication.setReconnectedCount(reconnectedCount++); } else { resetValues(""); } } }//end CONNECTIVITY_CHANGE 

Monitor de servicio:

 @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand > Received start id " + startId + ": " + intent); objHandler.postDelayed(mTasks, 1000); return START_STICKY; }//end onStartCommand private Runnable mTasks = new Runnable() { public void run() { if(myApplication.getWifiByChoise().equals("XYZ") && NetworkUtil.isXYZAvailable(context)) { try { //Get the numbers of Reconnection int count = myApplication.getReconnectedCount(); if(!NetworkUtil.isWifiConnected(context)) { NetworkUtil.connectToXYZ(context); myApplication.setisReconnect(true); myApplication.setReconnectedCount(count++); } if(!NetworkUtil.isConnectedToXYZ(context)) { NetworkUtil.connectToXYZ(context); myApplication.setisReconnect(true); myApplication.setReconnectedCount(count++); } } catch (Exception e) {e.printStackTrace();} } else { stopSelf(); } int ms_interval = 3000; objHandler.postDelayed(mTasks, ms_interval); } };//end Runnable mTasks 

El problema con mi aplicación es que: Se estrelló el dispositivo, Parece que está comiendo todo el RAM memoria. A veces con el wifi XYZ obtener desconectar no volverá a conectar y si el usuario cambia a otro wifi, no permitirá la conexión.

Realmente aprecio tu ayuda. Gracias.

4 Solutions collect form web for “Android verificar el estado WIFI (desconectado o el usuario ha cambiado WIFI) ¿Cómo FLAG?”

Compruebe el Nombre conectado a la red utilizando

 public String getWifiName(Context context) { WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (manager.isWifiEnabled()) { WifiInfo wifiInfo = manager.getConnectionInfo(); if (wifiInfo != null) { DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()); if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) { return wifiInfo.getSSID(); } } } return null; } 

Si este nombre coincide con su networkSSID, es decir, XYZ, que reanudar el servicio, de lo contrario si no coincide, que detener el servicio

 if getWifiName(this).compareTo("XYZ") == 0 { //XYZ is your network name on which you want to resume the service //code to resume } else { //code to stop the service } 

Así es como lo manejo en mi aplicación:

 public class WifiStateWatcher extends BroadcastReceiver { private MainActivity activity; public WifiStateWatcher(MainActivity activity) { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); } @Override public void onReceive(Context context, Intent intent) { SupplicantState supState; WifiManager wifiManager = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); supState = wifiInfo.getSupplicantState(); if (supState.equals(SupplicantState.COMPLETED)) { //we are connected to Wi-Fi network } else { //we lost Wi-Fi connectivity } } } 

Necesitará el permiso de android.permission.ACCESS_WIFI_STATE

Lo que has hecho es casi correcto. Usted necesita comprobar el nombre de ssd de la red con el nombre wifi conectado del usuario. Si empareja entonces haga su parte.

 WifiManager wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifiManager.isWifiEnabled()) { WifiInfo networkInfo = wifiManager.getConnectionInfo(); if (networkInfo != null) { DetailedState state = WifiInfo.getDetailedStateOf(networkInfo .getSupplicantState()); if (state == DetailedState.CONNECTED ) { return networkInfo.getSSID(); } } } return null; 

Ahora usted tiene el SSID de la red así que intente comprobar con el su nombre del wifi y SSID entonces usted conseguirá saber el estado de la conexión ….. Programación feliz

También acaba de comprobar esto y descubrió que la principal diferencia es:

 /** IP traffic should be available. */ DetailedState.CONNECTED 

y:

 /** * … * This state indicates that the supplicant has completed its * processing for the association phase and that data connection is * fully configured. Note, however, that there may not be any IP * address associated with the connection yet. Typically, a DHCP * request needs to be sent at this point to obtain an address. */ SupplicantState.COMPLETED 

Así que para confiar en que wifi es completamente, ahora he añadido los controles que:

 boolean isConnected = activeNetworkInfo.isConnected(); 

Y DetailedState.CONNECTED 🙂

Feliz codificación

  • Android tethering, cómo deshabilitar dhcp
  • Cómo escribir un Android SocketServer para escuchar en wifi
  • Cómo conectarse a WPA_EAP WIFI en Android con API 4.3
  • ADB, Wifi y Eclipse: ¿cómo puedo configurar?
  • Android activar / desactivar WiFi HotSpot mediante programación
  • Obtener la intensidad de la señal de WIFI y datos móviles
  • Android 5.0 Lollipop y 4.4 KitKat ignora mi red WiFi, enableNetwork () es inútil
  • Obtener SSID cuando WIFI está conectado
  • Solucionar 'la aplicación ha detenido' los errores de error
  • gama de distancias en las que trabaja directamente Wi-Fi
  • Android Compruebe si hay WiFi pero no Internet
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.