我创建了一个项目,在该项目中,使用广播接收器检查是否存在连续的Internet连接。现在如果互联网可用,它什么也不会显示,但是只要我通过从通知滚动来关闭我的互联网连接,它就会显示我的警报框并显示错误,提示没有互联网连接。但是当我打开我的互联网时,又从滚动通知中打开了我的警报框仍然在屏幕上如何关闭警报框。
我已尝试在全球范围内对我的警报进行delcare
//代码
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();
}
}
};
//呼叫恢复
@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));
执行此操作
像这样在onCreate()中启动警报对话框,使用您现有的代码一次又一次地创建警报对话框的新实例,这就是为什么dismiss()无法正常工作的原因
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();
}
并且您的广播接收器看起来像这样
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();
}
}
};
重要通知:-
取消在onStop()中注册广播接收器,否则将出现异常和崩溃
再次在ONRESUME()中不进行注册接收