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));
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()