You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 11:45:10