Search code examples
androidandroid-intentintentfilter

Dynamic BroadcastReceiver to Check Online Connectivity


I want to dynamically set up a BroadcastReceiver to check whether or not I am online ONLY when my app is running in the foreground. Within my main class, I created an an Intent Filter, a nested BroadcastReceiver Class and finally register/unregister the receiver within the onResume and onPause methods respectively.

My question is, is there an an intent ACTION that I can add to my intent filter that checks for online connectivity?

If not, how can I create this Dynamic Broadcast Receiver to perform only when my app is running?

Here is what my Class looks like....

public class MainActivity extends AppCompatActivity {
private IntentFilter onlineIntentFilter;
private CheckOnlineReceiver checkOnlineReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    onlineIntentFilter = new IntentFilter();
    checkOnlineReceiver = new CheckOnlineReceiver();
    //*****WHAT INTENT ACTION CAN I PASS TO CHECK NETWORK CONNECTIVITY******
    onlineIntentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);

    }

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(checkOnlineReceiver, onlineIntentFilter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(checkOnlineReceiver);
}


private class CheckOnlineReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Toast.makeText(getApplicationContext(),"IN METHOD, ACTION = " + action, Toast.LENGTH_LONG).show();
    }
}}

Solution

  • Add connectivity action onlineIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)

    and don't forget to add the permission

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

    The broadcast receiver's onReceive() will be called on connectivity change which means on both connected and disconnected. so whenever you receive the braodcast you have check for connectivity as below

    public boolean isNetworkAvailable() {
      ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo networkInfo = cm.getActiveNetworkInfo();
      if (networkInfo != null && networkInfo.isConnected()) {
          return true;
      }
      return false;
    }