MrStuff88
MrStuff88

Reputation: 327

Detect when connected/disconntected to Wi-Fi

I want to know when phone lost connection with Wi-Fi. I know that I should use Broadcast Receiver. So I registered the Broadcast Receiver:

intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(wifiScanReceiver, intentFilter);

Then I created Broadcast Receiver:

public class WifiScanReceiver extends BroadcastReceiver {

    public WifiScanReceiver() {

    }

    public void onReceive(Context c, Intent intent) {
        Log.i("TAG", "trigged");
    }
}

Then I connect to Wi-Fi and when I turn on/off router - nothing happens. What am I doing wrong?

I have all permissions:

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

Upvotes: 1

Views: 207

Answers (3)

Maytham Fahmi
Maytham Fahmi

Reputation: 33437

nothing happens. What am I doing wrong?

As far as I can see you have not declared the BroadcastReceiver, adding permission alone would not trigger your broadcast receiver.

My solution is based on declaring it via manifest, but that said your problem is I can not see you have declared broadcaster class in your code, so you can chose declare it in manifest or in your code.

So try to declare it and it should works. I have tested your code with both declaration and it works:

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

Or declare it programmatically new WifiScanReceiver() in onCreate method:

final IntentFilter filters = new IntentFilter();
filters.addAction("android.net.wifi.STATE_CHANGE");
super.registerReceiver(new WifiScanReceiver(), filters);

You will need this also (reference) in your WifiScanReceiver:

public void onReceive(Context context, Intent intent) {

        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

        if (isWiFi) {
            Log.i("TAG", "trigged");
        }
    }

Upvotes: 1

eRaisedToX
eRaisedToX

Reputation: 3361

As you have granted permissions in Manifest for Internet and Network access, that part is okay.

Further,

You may try ConnectivityManager Class for checking net /wifi connectivity to your device .

public boolean checkMobileInternetConn() {
        //Create object for ConnectivityManager class which returns network related info
        ConnectivityManager connectivity = (ConnectivityManager) _context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        //If connectivity object is not null
        if (connectivity != null) {
            //Get network info - WIFI internet access
            NetworkInfo info = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (info != null) {
                //Look for whether device is currently connected to WIFI network
                if (info.isConnected()) {
                    return true;
                }
            }
        }
        return false;
    }

(Refer this post for complete code.)

Try this n feel free to revert back :)

Upvotes: 1

lperez
lperez

Reputation: 13

Try with the ConnectivityManager class put this inside onReceive

ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = conMan.getActiveNetworkInfo();

    if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) 
        // Connection Successful 
    else
        // Connection  Failed 
  } 

Upvotes: 1

Related Questions