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

Android Pie 9.0中isNetworkAvailable()网络检测失效问题求助

解决Android Pie中网络连接检测失败的问题

我来帮你分析下问题根源,以及对应的解决办法:

核心问题1:明文HTTP请求被系统拦截

Android 9.0(Pie)开始默认启用网络安全配置,系统会阻止App发起明文HTTP请求。你代码里调用的http://clients3.google.com/generate_204是HTTP协议,这会导致连接被系统直接拦截,触发异常后执行onUpdateNetworkStatus(false),所以总是显示未连接。

核心问题2:过时API的潜在风险

ConnectivityManager.getActiveNetworkInfo()在Android P及以上已经被标记为过时,虽然它暂时还能工作,但后续版本可能会被彻底移除,建议替换为新的适配API。


快速修复方案(优先推荐)

直接把请求地址改成HTTPS版本,这是最简单高效的解决方式,完全符合Pie的安全要求:
将代码里的:

final URL url = new URL("http://clients3.google.com/generate_204");

替换为:

final URL url = new URL("https://clients3.google.com/generate_204");

备选方案(若必须使用HTTP)

如果因为特殊原因无法切换到HTTPS,可以通过配置网络安全策略允许指定域名的明文流量:

  1. 在res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">clients3.google.com</domain>
    </domain-config>
</network-security-config>
  1. 在AndroidManifest.xml的application标签中添加配置引用:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

适配更高版本的网络状态检测API

为了兼容未来的Android版本,建议把过时的getActiveNetworkInfo()替换为新的API,修正后的完整代码示例:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    
    // 适配Android P及以上的网络状态检测
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = connectivityManager.getActiveNetwork();
        if (network == null) {
            onUpdateNetworkStatus(false);
            return false;
        }
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities == null || !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) || !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
            onUpdateNetworkStatus(false);
            return false;
        }
    } else {
        // 兼容Android 6.0以下版本
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo == null || !networkInfo.isConnected()) {
            onUpdateNetworkStatus(false);
            return false;
        }
    }

    // 发起验证请求(已改为HTTPS)
    new Thread(() -> {
        try {
            URL url = new URL("https://clients3.google.com/generate_204");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestProperty("User-Agent", "Android");
            httpURLConnection.setRequestProperty("Connection", "close");
            httpURLConnection.setConnectTimeout(1500);
            httpURLConnection.connect();
            onUpdateNetworkStatus(httpURLConnection.getResponseCode() == 204 && httpURLConnection.getContentLength() == 0);
        } catch (Exception e) {
            onUpdateNetworkStatus(false);
            e.printStackTrace();
        }
    }).start();
    return true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:24:25