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

开发含WebView的Android应用:网络可用性检测实现困惑求助

解决Android WebView加载前的网络检测问题

嘿,我来帮你搞定这个在WebView显示默认提示前检测网络的需求!咱们一步步来实现:

1. 先添加必要的网络权限

首先得在AndroidManifest.xml里添加网络访问和状态检测的权限,不然App没法获取网络信息:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2. 编写网络检测工具方法

咱们写一个通用的方法来判断设备是否有可用网络,兼容不同Android版本:

public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    if (connectivityManager == null) {
        return false;
    }
    
    // 适配Android 10及以上版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        Network network = connectivityManager.getActiveNetwork();
        if (network == null) {
            return false;
        }
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) 
                || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) 
                || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
    } else {
        // 适配Android 9及以下版本
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

3. 修改你的onCreate代码,加入网络检测

现在把这个检测逻辑整合到你的WebView初始化代码里,根据网络状态决定加载URL还是显示无网络提示:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    WebView webView = findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    
    // 检测网络状态
    if (isNetworkAvailable(this)) {
        // 有网络时加载目标URL
        webView.loadUrl("http://yourconsenthomeb...");
    } else {
        // 无网络时显示提示(这里示例用Toast,你也可以显示布局里的提示View)
        Toast.makeText(this, "当前无可用网络,请检查网络设置", Toast.LENGTH_LONG).show();
        // 也可以加载本地的无网络提示页面
        // webView.loadUrl("file:///android_asset/no_network.html");
    }
}

额外提示

  • 如果你需要实时监听网络状态变化(比如用户在App运行时打开/关闭网络),可以注册ConnectivityManager.NetworkCallback来监听网络状态的改变,这样能及时更新WebView的状态。
  • 记得处理WebView加载失败的情况,比如网络突然断开时,WebView会显示默认错误页,你可以通过WebViewClient的onReceivedError方法自定义错误提示。

内容的提问来源于stack exchange,提问作者Usman Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:49