1

I have developed an app that uses BroadcastReceiver class to check if the Wifi state has changed. The code is given below.

public class NetworkChangeReceiver extends BroadcastReceiver {

    public static boolean isWifiConnected = true;
    public static final String tag = "NETWORKCHANGERECEIVER";

    @Override
    public void onReceive(final Context context, final Intent intent) {

        ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (wifi.isConnected()) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null && !(connectionInfo.getSSID().equals(""))) {
                String ssid = connectionInfo.getSSID();
                Log.i("SSID",ssid);

            }
            isWifiConnected = true;
            Log.i("wifi", "connected");
        } else {
            Log.i("wifi", "not connected");
            isWifiConnected = false;
        }
    }
}

I registered the receiver in manifest.xml as follows :

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

Everything works perfectly as expected.

Now I want that this receiver should work only when a checkbox is checked and should get disabled when it is unchecked. How do I achieve this?

    wifibox = (CheckBox)findViewById(R.id.checkBox1);
    wifibox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
    if(buttonView.isChecked()){
     // The receiver should get activated now.
    }
    else{
     // The receiver should get de-activated now.
    }

}
Archit Arora
  • 2,508
  • 7
  • 43
  • 69
  • See: http://stackoverflow.com/questions/5624470/enable-and-disable-a-broadcast-receiver – Nik May 15 '14 at 10:32

2 Answers2

1

Try this, hope it helps.

final NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
final IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
wifibox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

  @Override
  public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
      if (isChecked) {
          registerReceiver(networkChangeReceiver, filter);
      }
      else {
          unregisterReceiver(networkChangeReceiver);
      }
  });
darcyy
  • 5,236
  • 5
  • 28
  • 41
Biraj Zalavadia
  • 28,348
  • 10
  • 61
  • 77
0

May this one help you:

wifibox = (CheckBox)findViewById(R.id.checkBox1);
NetworkChangeReceiver receiver;
wifibox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {


@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
    if(buttonView.isChecked()) {
        // The receiver should get activated now.
        receiver = new NetworkChangeReceiver ();
        IntentFilter filter = new IntentFilter();
        filter.addAction("YOUR ACTION NAME");
        registerReceiver(receiver, filter);
    }
    else {
        //logic if receiver is not registered
    }
}
darcyy
  • 5,236
  • 5
  • 28
  • 41
Umang Kothari
  • 3,674
  • 27
  • 36