Internet签入对话框

问题描述 投票:0回答:1

我创建了一个项目,在该项目中,使用广播接收器检查是否存在连续的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));
android android-studio broadcastreceiver
1个回答
0
投票

执行此操作

像这样在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()中不进行注册接收

© www.soinside.com 2019 - 2024. All rights reserved.