Search code examples
androidoptimizationbroadcastreceiver

Broadcast receiver to check the Internet Connection


I am beginner in android. I just want to know what is Broadcast receiver (with an example if possible) and it's on onReceive() method. and how we can use that receiver to check the Internet connection.

So should I use the same to check the Internet connection or just create a static method in Main class and access it in other classes?


Solution

  • Okay so i'm not the best programmer but this should work.

    this is for a fragment but you should easily be able to change it for an activity.

    first make 3 variables:

    Context _mContext;
    BroadcastReceiver br = null;
    IntentFilter filter;
    

    in your onCreate() paste this:

    BroadcastReceiver br = new MyBroadCastReceiver();
    IntentFilter filter = new IntentFilter();
    filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    _mContext = getActivity().getApplicationContext()
    _mContext.registerReceiver(br, filter);
    

    with this you register your fragment to the broadcastreceiver class MyBroadCastReceiver.

    Now make a MyBroadCastReceiver class and paste this:

    public class MyBroadCastReceiver extends BroadcastReceiver {
                @Override
                public void onReceive(Context context, Intent intent) {
                    int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                            WifiManager.WIFI_STATE_UNKNOWN);
    
        switch(extraWifiState) {
            case: WifiManager.WIFI_STATE_DISABLED:
            //do something
            break;
            case WifiManager.WIFI_STATE_ENABLED:
            //do something 
            break;
            case: WifiManager.WIFI_STATE_ENABLING:
            //do something
            break;
            case: WifiManager.WIFI_STATE_DISABLING:
            //do something
            break;
            case: WifiManager.WIFI_STATE_UNKNOWN:
            //do something with data if you desire so, I found it unreliable until now so i've done nothing with it
            }
          }
        }`
    

    Go back to your fragment and paste this somewhere at the bottom:

        @Override
        public void onPause()    {
            try {
                if (br == null) {
                    Log.d("Receiver", "Can't unregister a receiver which was never registered");
                } else {
                    getActivity().getApplicationContext().unregisterReceiver(br);
                    br = null;
                }
            } catch(Exception err)  {
                Log.e(err.getClass().getName(), err.getMessage(), err);
                Log.e("Receiver not registered", "Couldn't get context");
            }
            super.onPause();
        }
    
        @Override
        public void onResume()  {
            if(br != null)  {
                Log.d("Receiver", "Can't register receiver which already has been registered");
            }   else    {
                try {
                    br = new MyBroadCastReceiver();
                    filter = new IntentFilter();
                    filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
                    filter.addAction(CONNECTIVITY_SERVICE);
                    _mContext = getActivity().getApplicationContext();
                    _mContext.registerReceiver(br, filter);
                } catch(Exception err)   {
                    Log.e(err.getClass().getName(), err.getMessage(), err);
                }
            }
            super.onResume();
        }
    

    You should be able to call register/unregister the broadcast like this anywhere. I hope this is enough