Search code examples
androidandroid-studiobroadcastreceiver

Internet Check in dialog


I have created a project in which it checks for continuous Internet Connection using Broadcast receiver. Now if internet is available it shows nothing but as soon as i turn my internet connection off by scrolling from notification,it shows my alert box with error that no internet connection.but when i turn my internet turn on again from scrolling notifaction my alert box remains on Screen how to dismiss alert box.

I have tried to globally delcare my Alertd

//Code

 private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
            boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);



            if(currentNetworkInfo.isConnected()){

               // alertDialog.dismiss(); not working showing Error
//Attempt to invoke virtual method 'void androidx.appcompat.app.AlertDialog.dismiss()' on a null object reference
                // Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();



            }
               else{
 alerDialogbuilder = new AlertDialog.Builder(Registration.this);
            alerDialogbuilder.setTitle("Internet / Wifi Connection Error ! ");
            alerDialogbuilder.setMessage("Turn on Wifi/Internet ");

            alerDialogbuilder.setCancelable(false);
            alerDialogbuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS), 0);

                }
            });
            alerDialogbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent iteer = new Intent(Registration.this, MainActivity.class);
                    startActivity(iteer);
                    overridePendingTransition(R.anim.from_left, R.anim.slide_to_right);
                    finish();
                }
            });

            alertDialog = alerDialogbuilder.create();
                alertDialog.show();
            }
        }
    };

//Calling on Resume

@Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume");
        this.registerReceiver(this.mConnReceiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }

//inside on create

 this.registerReceiver(this.mConnReceiver,
                new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

Solution

  • do this

    initiate alert dialog in onCreate() like this , with your existing code you were creating new instances of alert dialog again and again and that is why dismiss() was not working

    onCreate(){
     alerDialogbuilder = new AlertDialog.Builder(Registration.this);
                alerDialogbuilder.setTitle("Internet / Wifi Connection Error ! ");
                alerDialogbuilder.setMessage("Turn on Wifi/Internet ");
    
                alerDialogbuilder.setCancelable(false);
                alerDialogbuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS), 0);
    
                    }
                });
                alerDialogbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Intent iteer = new Intent(Registration.this, MainActivity.class);
                        startActivity(iteer);
                        overridePendingTransition(R.anim.from_left, R.anim.slide_to_right);
                        finish();
                    }
                });
    
                alertDialog = alerDialogbuilder.create();
    
    }
    

    and your broadcast receiver looks like this

    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
                boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
    
                NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
                NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
    
    
    
                if(currentNetworkInfo.isConnected()){
    
                  //dismiss dialog here
                    alertDialog.dismiss();
    
    
    
                }
                   else{
     //show dialog here
                    alertDialog.show();
                }
            }
        };
    //unregister broadtcast here
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (this.mConnReceiver != null) {
            unregisterReceiver(this.mConnReceiver);
        }
    
    
    }
    

    IMPORTANT NOTICE:-

    unregister broadcast receiver in onStop() else there will be exception and crash

    DO NO REGISTER RECEIVER AGAIN IN ONRESUME()