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

替换已弃用NetworkInfo API,改用Android非弃用网络API

替换弃用NetworkInfo API的最优方案

你的场景是同步检查当前设备是否有可用网络连接,**ConnectivityManager.getNetworkCapabilities()**是最适配的非弃用API——它能直接获取当前活跃网络的能力状态,无需注册回调(适合单次检查的场景),而NetworkCallback更适合监听网络状态的动态变化,getLinkProperties主要用于获取网络链路的具体属性,并非判断联网状态的首选。

修改后的代码

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;

public class ConnectionDetector {

    private final Context _context;

    public ConnectionDetector(Context context) {
        this._context = context.getApplicationContext(); // 使用ApplicationContext避免内存泄漏
    }

    public boolean isConnectingToInternet() {
        ConnectivityManager connectivityManager = 
            (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        if (connectivityManager == null) {
            return false;
        }

        // 适配API 21及以上版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Network activeNetwork = connectivityManager.getActiveNetwork();
            if (activeNetwork == null) {
                return false;
            }
            NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
            // 检查网络是否具备可访问互联网的有效连接
            return networkCapabilities != null 
                && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
        } else {
            // 兼容API 21以下(若项目最低支持版本≥21可删除此分支)
            //noinspection deprecation
            android.net.NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            return networkInfo != null && networkInfo.isConnected();
        }
    }
}

关键说明

  • 改用ApplicationContext避免持有Activity引用引发内存泄漏
  • API 21+版本通过NetworkCapabilities做更严谨的判断:NET_CAPABILITY_VALIDATED确保网络是可正常访问互联网的(排除连接了无网WiFi/热点的情况)
  • 保留API 21以下的兼容分支(按需取舍)
  • 需在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:27:36