我正在做一个现场项目。以及当用户单击该应用程序时。出现欢迎屏幕(该屏幕上有一个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的简单方法。