我正在做一个现场项目。以及当用户单击该应用程序时。出现欢迎屏幕(该屏幕上有一个Web View )。如果未连接互联网,则该应用程序将崩溃。基本上,我的问题是以编程方式检查移动设备是否已连接到Internet。如果不是,则不要将数据从Web服务获取到WebView中,并显示一个对话框,显示“检查您的Internet连接”

在进行研究时,我发现了很多东西,并且我试图实现这一点。但是,它不能满足我的要求

我的代码是

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    else
    {
        Description.setVisibility(View.INVISIBLE);
        new AlertDialog.Builder(WelcomePage.this)
        .setTitle(getResources().getString(R.string.app_name))
        .setMessage(
                getResources().getString(
                        R.string.internet_error))
        .setPositiveButton("OK", null).show();
    }
    return false;
}

我在doInBackground()AsyncTask中调用此函数

请帮忙!

最佳答案

您可以 checkout 此库:

https://github.com/novoda/merlin

您只需implement Connectable,当网络中断或启动时,您将获得回调。

因此,您可以在这种情况下显示对话框。

您还可以查询库的当前状态,并选择不执行网络任务

创建Merlin(使用Merlin.Builder())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context);

在您的 Activity 中绑定(bind)和取消绑定(bind)服务
@Override
protected void onResume() {
    super.onResume();
    merlin.bind();
}

@Override
protected void onPause() {
    super.onPause();
    merlin.unbind();
}

注册回调
merlin.registerConnectable(new Connectable() {
        @Override
        public void onConnect() {
            // Do something!
        }
});

演示中的MerlinActivity显示了一种从主应用程序代码中整理Merlin的简单方法。

10-08 15:25