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

Android应用中如何检查蜂窝数据是否启用(规避废弃API)

检查蜂窝数据状态的无废弃API实现

你的代码中ActiveNetworkInfo在API 23(Android 6.0)已被废弃,且针对高版本设备的实现存在局限性。以下是分版本适配的无废弃实现,同时区分两种常见需求:

一、检查当前是否通过蜂窝网络连接

private bool IsConnectedToCellular(Context context)
{
    var connectivityManager = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
    if (connectivityManager == null)
        return false;

    if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
    {
        var network = connectivityManager.ActiveNetwork;
        if (network == null)
            return false;
        
        var networkCapabilities = connectivityManager.GetNetworkCapabilities(network);
        return networkCapabilities != null && networkCapabilities.HasTransport(Android.Net.TransportType.Cellular);
    }
    else
    {
        // API <23 用非废弃接口遍历所有网络
        var allNetworks = connectivityManager.AllNetworks;
        foreach (var network in allNetworks)
        {
            var networkInfo = connectivityManager.GetNetworkInfo(network);
            if (networkInfo != null && networkInfo.IsConnected && networkInfo.Type == ConnectivityType.Mobile)
                return true;
        }
        return false;
    }
}

说明:API <23时,用AllNetworks配合GetNetworkInfo(Network)替代废弃的ActiveNetworkInfo,遍历所有网络确认是否有活跃的蜂窝连接。

二、检查系统蜂窝数据开关是否启用(非当前连接状态)

如果你的需求是确认系统设置里的蜂窝数据开关是否打开,而非当前是否连接,可使用以下实现:

private bool IsCellularDataEnabled(Context context)
{
    var telephonyManager = (TelephonyManager)context.GetSystemService(Context.TelephonyService);
    if (telephonyManager == null)
        return false;

    if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
    {
        // API 30+ 使用官方推荐的IsDataEnabled
        return telephonyManager.IsDataEnabled;
    }
    else if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
    {
        // API 26-29 用DataEnabled(低版本无替代接口,可安全兼容)
        return telephonyManager.DataEnabled;
    }
    else
    {
        // API <26 读取系统设置值
        try
        {
            return Settings.System.GetInt(context.ContentResolver, Settings.System.MobileData) == 1;
        }
        catch (Settings.SettingNotFoundException)
        {
            return false;
        }
    }
}

权限要求

需在AndroidManifest.xml中添加对应权限:

<!-- 检查网络连接状态所需 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 检查蜂窝数据开关(API<26)所需 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Android 10+(API29+)中,READ_PHONE_STATE属于危险权限,需动态申请。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:46:18