Android Internet签入对话框
我创建了一个项目,其中它使用广播接收器检查连续的互联网连接。 现在,如果internet可用,它将不显示任何内容,但当我通过从通知滚动关闭internet连接时,它将显示我的警报框,错误为没有internet连接。但当我从滚动不操作再次打开internet时,我的警报框将保留在屏幕上如何关闭警报框 我试着去照顾我的孩子 //代码Android Internet签入对话框,android,android-studio,broadcastreceiver,Android,Android Studio,Broadcastreceiver,我创建了一个项目,其中它使用广播接收器检查连续的互联网连接。 现在,如果internet可用,它将不显示任何内容,但当我通过从通知滚动关闭internet连接时,它将显示我的警报框,错误为没有internet连接。但当我从滚动不操作再次打开internet时,我的警报框将保留在屏幕上如何关闭警报框 我试着去照顾我的孩子 //代码 private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { public
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));
}
//内部创建
this.registerReceiver(this.mConnReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
这样做
像这样在onCreate()中启动警报对话框,使用现有代码一次又一次地创建警报对话框的新实例,这就是Disclease()不起作用的原因
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();
}
}
};
//unregister broadtcast here
@Override
protected void onDestroy() {
super.onDestroy();
if (this.mConnReceiver != null) {
unregisterReceiver(this.mConnReceiver);
}
}
重要通知:-
在onStop()中注销广播接收器,否则将出现
异常和崩溃
不要在ONRESUME()中再次注册接收器。
它对我有用,但能帮我解决如何停止广播接收器的问题吗??如果我没有在androidSure中使用广播接收器,我会更新代码,如果你抛出异常,应用程序可能会崩溃,你必须注销广播接收器,你能帮我解决这个问题吗??