Android Studio Java开发:如何持续检测网络连接无网弹出提示
解决方案
核心问题
- 现有代码未实现网络状态检测逻辑,无网络触发提示的相关代码完全缺失
- 你自定义的
Callback继承了WebViewClient但从未赋值给WebView,定义的类完全未生效 - 未处理WebView加载失败的回调场景,无网络时WebView只会显示默认错误页,不会触发你要的提示
修复步骤
1. 添加网络状态检测方法
在MainActivity中添加通用网络检测方法:
private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) return false; NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork()); return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)); }
导入缺失的依赖包:
import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.widget.Toast; // 如果要使用对话框提示,额外导入:import android.app.AlertDialog;
2. 调整onCreate逻辑
先判断网络状态,有网络再加载网页,无网络直接弹出提示:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); web = findViewById(R.id.webView); WebSettings webSettings = web.getSettings(); webSettings.setJavaScriptEnabled(true); web.setWebChromeClient(new WebChromeClient()); // 替换原有WebViewClient配置,使用自定义的Callback类 web.setWebViewClient(new Callback()); // 先检测网络再执行加载逻辑 if (isNetworkAvailable()) { web.loadUrl(getString(R.string.u)); } else { // Toast提示 Toast.makeText(this, "no internet connection found", Toast.LENGTH_LONG).show(); // 如需对话框提示替换为下面的代码 /* new AlertDialog.Builder(this) .setTitle("提示") .setMessage("no internet connection found") .setPositiveButton("确定", null) .show(); */ } }
3. 完善自定义Callback类
覆盖加载失败回调,处理进入页面后加载过程中突然断网的场景:
private class Callback extends WebViewClient { @Override public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { return true; } // 网页加载失败时触发 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); if (!isNetworkAvailable()) { Toast.makeText(MainActivity.this, "no internet connection found", Toast.LENGTH_LONG).show(); } } }
补充说明
- 如果还未添加网络访问权限,记得在AndroidManifest.xml中补充:
<uses-permission android:name="android.permission.INTERNET" /> - 如果需要实时监听网络状态变更,进入页面后断网自动触发提示,可以额外注册
NetworkCallback实现监听,当前实现已经覆盖初始加载、加载过程中断网的基础使用场景。
内容的提问来源于stack exchange,提问作者GSK
相关产品推荐
相关产品推荐

