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

Android 网络状态检测方法getActiveNetworkInfo已弃用 求替代方案

替代实现方案

使用前请先在AndroidManifest.xml中声明必要权限:

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

1. 一次性查询当前网络是否可用

Android 6.0(API 23)及以上官方推荐使用NetworkCapabilities判断网络状态,可兼顾高低版本适配的实现代码如下:

@SuppressWarnings("deprecation")
private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null) return false;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = cm.getActiveNetwork();
        if (network == null) return false;
        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        return capabilities != null 
            && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    } else {
        // 仅API 23以下的低版本系统会调用该段旧逻辑,不会触发弃用警告
        NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

其中NET_CAPABILITY_VALIDATED代表当前网络已经完成公网可用性验证,判断结果比旧的isConnected()更准确。

2. 实时监听网络状态变化

如果需要在网络状态变更时自动触发回调,可使用NetworkCallback实现:

private ConnectivityManager.NetworkCallback networkCallback;

private void registerNetworkListener() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null) return;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        // API 24及以上直接注册默认网络监听即可
        networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                super.onAvailable(network);
                // 网络可用时的逻辑
            }

            @Override
            public void onLost(@NonNull Network network) {
                super.onLost(network);
                // 网络断开时的逻辑
            }
        };
        cm.registerDefaultNetworkCallback(networkCallback);
    } else {
        // 低版本适配逻辑
        NetworkRequest request = new NetworkRequest.Builder()
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build();
        networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                // 网络可用时的逻辑
            }

            @Override
            public void onLost(@NonNull Network network) {
                // 网络断开时的逻辑
            }
        };
        cm.registerNetworkCallback(request, networkCallback);
    }
}

// 页面销毁时必须移除回调,避免内存泄漏
@Override
protected void onDestroy() {
    super.onDestroy();
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm != null && networkCallback != null) {
        cm.unregisterNetworkCallback(networkCallback);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:24:04