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

Android中ConnectivityManager.TYPE_MOBILE已废弃,如何修改网络检测代码?

修复ConnectivityManager废弃API问题,适配新版Android的网络连接检测代码

原代码中使用的ConnectivityManager.TYPE_MOBILE、TYPE_WIFI以及getNetworkInfo()方法在Android API 29(Android 10)及以上已被官方废弃,需要改用基于NetworkCapabilities的新API来实现网络连接检测,同时兼容旧版本系统。

修改后的完整代码

package com.aniketjain.weatherapp.network;

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

public class InternetConnectivity {
    public static boolean isInternetConnected(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 activeNetwork = connectivityManager.getActiveNetwork();
            if (activeNetwork == null) {
                return false;
            }
            NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork);
            return networkCapabilities != null && 
                   (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                    || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                    || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
        } 
        // Android 5.0到Android 9的兼容逻辑
        else 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.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                    || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                    || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
        } 
        // Android 5.0以下的兜底逻辑(已废弃API仅作为兼容)
        else {
            return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
        }
    }
}

关键修改说明

  • 替换废弃常量:用NetworkCapabilities.TRANSPORT_CELLULAR替代TYPE_MOBILE,TRANSPORT_WIFI替代TYPE_WIFI,同时新增TRANSPORT_ETHERNET支持以太网连接检测,覆盖更多网络场景
  • 版本适配逻辑:
    • API 29+:通过getActiveNetwork()获取当前活跃网络,再调用getNetworkCapabilities()判断网络传输类型
    • API 21-28:使用NetworkCapabilities的兼容逻辑,避免直接调用已废弃方法
    • API 20及以下:保留getActiveNetworkInfo()作为兜底,确保旧版本系统的兼容性
  • 空值安全处理:增加了ConnectivityManager、Network、NetworkCapabilities的空值判断,避免运行时空指针异常

必要权限

确保在AndroidManifest.xml中添加网络状态权限:

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:35:24