Broadcast receiver for checking internet connection in android app

后端 未结 21 3477
温柔的废话
温柔的废话 2020-11-21 22:28

I am developing an android broadcast receiver for checking internet connection.

The problem is that my broadcast receiver is being called two times. I want it to get

21条回答
  •  执念已碎
    2020-11-21 22:43

    Checking internet status every time using Broadcast Receiver:

    Full source code available on Google Drive.

    AndroidManifest.xml

    
    
    
                
                    
                
    
    

    BroadcastReciever

    package com.keshav.networkchangereceiverexample.receivers;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.util.Log;
    
    import static com.keshav.networkchangereceiverexample.MainActivity.dialog;
    
    public class NetworkChangeReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            try
            {
                if (isOnline(context)) {
                    dialog(true);
                    Log.e("keshav", "Online Connect Intenet ");
                } else {
                    dialog(false);
                    Log.e("keshav", "Conectivity Failure !!! ");
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
    
        private boolean isOnline(Context context) {
            try {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                //should check null because in airplane mode it will be null
                return (netInfo != null && netInfo.isConnected());
            } catch (NullPointerException e) {
                e.printStackTrace();
                return false;
            }
        }
    }
    

    MainActivity.java

    package com.keshav.networkchangereceiverexample;
    
    import android.content.BroadcastReceiver;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.graphics.Color;
    import android.net.ConnectivityManager;
    import android.os.Build;
    import android.os.Handler;
    import android.os.Looper;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.TextView;
    
    import com.keshav.networkchangereceiverexample.receivers.NetworkChangeReceiver;
    
    public class MainActivity extends AppCompatActivity {
    
        private BroadcastReceiver mNetworkReceiver;
        static TextView tv_check_connection;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv_check_connection=(TextView) findViewById(R.id.tv_check_connection);
            mNetworkReceiver = new NetworkChangeReceiver();
            registerNetworkBroadcastForNougat();
    
        }
    
        public static void dialog(boolean value){
    
            if(value){
                tv_check_connection.setText("We are back !!!");
                tv_check_connection.setBackgroundColor(Color.GREEN);
                tv_check_connection.setTextColor(Color.WHITE);
    
                Handler handler = new Handler();
                Runnable delayrunnable = new Runnable() {
                    @Override
                    public void run() {
                        tv_check_connection.setVisibility(View.GONE);
                    }
                };
                handler.postDelayed(delayrunnable, 3000);
            }else {
                tv_check_connection.setVisibility(View.VISIBLE);
                tv_check_connection.setText("Could not Connect to internet");
                tv_check_connection.setBackgroundColor(Color.RED);
                tv_check_connection.setTextColor(Color.WHITE);
            }
        }
    
    
        private void registerNetworkBroadcastForNougat() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
            }
        }
    
        protected void unregisterNetworkChanges() {
            try {
                unregisterReceiver(mNetworkReceiver);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            unregisterNetworkChanges();
        }
    }
    

    activity_main.xml

    
    
    
        
    
    
    

提交回复
热议问题