android - 无法关闭 ProgressDialog(使用 BroadcastReceiver)

标签 android broadcastreceiver progressdialog dismiss

我的问题是: 我希望我的应用程序在没有互联网连接时阻止按钮或整个 Activity ,并在互联网连接恢复时取消阻止它们。我正在使用 BroadcastReceiver 在主要 Activity 中检查互联网并且运行良好:

public class MainActivity extends BroadCast {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.registerReceiver(this.mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

// code
}

为了阻止 MainActivity,我使用 ProgressDialog 并将方法 setCancelable 设置为 false。 广播 Activity :

public class BroadCast extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    public BroadcastReceiver mConnReceiver = new BroadcastReceiver()
    {
        public void onReceive(Context context, Intent intent)
        {
            @SuppressWarnings("deprecation")
            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

            if(currentNetworkInfo.isConnected()) {
                BlockActivity(true);
            }
            else {
                BlockActivity(false); 
            }
        }
    };

    public void BlockActivity(Boolean connected)
    {
        final ProgressDialog pausingDialog = ProgressDialog.show(this, "", "Application waiting for internet connection...");

        if (!connected)
        {
            Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show();
            pausingDialog.show();
            pausingDialog.setCancelable(false);
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            pausingDialog.setCancelable(true);
            pausingDialog.dismiss();        
        }
    }
}

Toast 信息效果很好,但问题出在 ProgressDialog 上。当互联网连接消失时它会显示,但当互联网连接恢复时它不想消失。如何解决?谢谢。

最佳答案

保留对对话框的全局引用,这样您就不会一直重新创建它。您还应该尽可能使用基本类型(boolean 而不是 Boolean)并遵守 Java 命名约定 (camelCase)。

ProgressDialog pausingDialog;
public void blockActivity(boolean connected)
    {
        if (pausingDialog == null){
            pausingDialog = new ProgressDialog (this);
            pausingDialog.setMessage ("Application waiting for internet connection...");
        }

        if (!connected)
        {
            Toast.makeText(getApplicationContext(), "Disconnected", Toast.LENGTH_LONG).show();
            pausingDialog.show();
            pausingDialog.setCancelable(false);
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
            pausingDialog.setCancelable(true);
            pausingDialog.dismiss();        
        }
    }

关于android - 无法关闭 ProgressDialog(使用 BroadcastReceiver),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15188464/

相关文章:

android - 开始新 Activity 时打开进度对话框

android - Phonegap,文本区域将不接受输入

android - Room 分页无法正确地将 Flow<PagingData<Model>> 与其他流合并

c# - 当有多个服务器广播时,客户端如何接收多个广播消息?

android - ProgressDialog 已弃用。要使用的替代项是什么?

android - ProgressDialog - 如何删除数字

安卓滚动分页

java - 销毁在单击时以编程方式多次添加的按钮

机器人 : ACTION_PACKAGE_ADDED not received (xperia SO-03D)

Android BroadcastReceiver 设置闹钟