How to detect when WIFI Connection has been established in Android? How to detect when WIFI Connection has been established in Android? android android

How to detect when WIFI Connection has been established in Android?


You can register a BroadcastReceiver to be notified when a WiFi connection is established (or if the connection changed).

Register the BroadcastReceiver:

IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);registerReceiver(broadcastReceiver, intentFilter);

And then in your BroadcastReceiver do something like this:

@Overridepublic void onReceive(Context context, Intent intent) {    final String action = intent.getAction();    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {        if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {            //do stuff        } else {            // wifi connection was lost        }    }}

For more info, see the documentation for BroadcastReceiver and WifiManager

Of course you should check whether the device is already connected to WiFi before this.

EDIT:Thanks to ban-geoengineering, here's a method to check whether the device is already connected:

private boolean isConnectedViaWifi() {     ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE);     NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);          return mWifi.isConnected();}


The best that worked for me:

AndroidManifest

<receiver android:name="com.AEDesign.communication.WifiReceiver" >   <intent-filter android:priority="100">      <action android:name="android.net.wifi.STATE_CHANGE" />   </intent-filter></receiver>

BroadcastReceiver class

public class WifiReceiver extends BroadcastReceiver {   @Override   public void onReceive(Context context, Intent intent) {      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);      if(info != null && info.isConnected()) {        // Do your work.         // e.g. To check the Network Name or other info:        WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);        WifiInfo wifiInfo = wifiManager.getConnectionInfo();        String ssid = wifiInfo.getSSID();      }   }}

Permissions

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


For me only WifiManager.NETWORK_STATE_CHANGED_ACTION works.

Register a broadcast receiver:

IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);registerReceiver(broadcastReceiver, intentFilter);

and receive:

@Overridepublic void onReceive(Context context, Intent intent) {    final String action = intent.getAction();    if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){        NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);        boolean connected = info.isConnected();        //call your method    }      }