当前位置:首页 > 行业动态 > 正文

安卓开发获取手机运营商网络类型

获取手机运营商网络类型的方法

权限配置

AndroidManifest.xml 中添加读取手机状态的权限:

安卓开发获取手机运营商网络类型

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

使用 TelephonyManager 获取网络类型

通过 TelephonyManagergetNetworkType() 方法获取原始网络类型值,再映射为可读的字符串。

示例代码

import android.content.Context;
import android.telephony.TelephonyManager;
public class NetworkUtils {
    public static String getNetworkType(Context context) {
        TelephonyManager telephonyManager = 
            (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (telephonyManager == null) {
            return "Unknown";
        }
        int networkType = telephonyManager.getNetworkType();
        switch (networkType) {
            case TelephonyManager.NETWORK_TYPE_NR: return "5G/NR";
            case TelephonyManager.NETWORK_TYPE_LTE: return "4G/LTE";
            case TelephonyManager.NETWORK_TYPE_HSPAP: return "3G+";
            case TelephonyManager.NETWORK_TYPE_HSDPA: return "3G";
            case TelephonyManager.NETWORK_TYPE_HSUPA: return "3G";
            case TelephonyManager.NETWORK_TYPE_UMTS: return "3G";
            case TelephonyManager.NETWORK_TYPE_EVDO_0: return "CDMA EVDO Rev.0";
            case TelephonyManager.NETWORK_TYPE_EVDO_A: return "CDMA EVDO Rev.A";
            case TelephonyManager.NETWORK_TYPE_EVDO_B: return "CDMA EVDO Rev.B";
            case TelephonyManager.NETWORK_TYPE_EHRPD: return "eHRPD";
            case TelephonyManager.NETWORK_TYPE_HSPA: return "3G";
            case TelephonyManager.NETWORK_TYPE_HSPAP: return "3G+";
            case TelephonyManager.NETWORK_TYPE_IDEN: return "iDEN";
            case TelephonyManager.NETWORK_TYPE_LTE_CA: return "4G+"; // LTE Carrier Aggregation
            case TelephonyManager.NETWORK_TYPE_UNKNOWN: return "Unknown";
            default: return "Unknown";
        }
    }
}

网络类型与常量值对照表

常量名称 网络类型描述
NETWORK_TYPE_NR 19 5G/NR
NETWORK_TYPE_LTE 13 4G/LTE
NETWORK_TYPE_HSPAP 15 3G+ (HSPA+)
NETWORK_TYPE_HSDPA 8 3G (HSDPA)
NETWORK_TYPE_HSUPA 9 3G (HSUPA)
NETWORK_TYPE_UMTS 3 3G
NETWORK_TYPE_EVDO_0 4 CDMA EVDO Rev.0
NETWORK_TYPE_EVDO_A 5 CDMA EVDO Rev.A
NETWORK_TYPE_EVDO_B 6 CDMA EVDO Rev.B
NETWORK_TYPE_EHRPD 14 eHRPD
NETWORK_TYPE_HSPA 10 3G
NETWORK_TYPE_IDEN 2 iDEN
NETWORK_TYPE_LTE_CA 16 4G+ (载波聚合)
NETWORK_TYPE_UNKNOWN -1 未知

相关问题与解答

问题1:如何监听网络类型的实时变化?

解答
可通过 PhoneStateListener 监听网络变化,示例如下:

安卓开发获取手机运营商网络类型

TelephonyManager telephonyManager = 
    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener() {
    @Override
    public void onDataConnectionStateChanged(int state, int networkType) {
        super.onDataConnectionStateChanged(state, networkType);
        String type = getNetworkType(networkType); // 自定义方法映射网络类型
        Log.d("NetworkChange", "Current Type: " + type);
    }
};
telephonyManager.listen(listener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

问题2:如何判断设备是否正在使用移动数据(而非WiFi)?

解答
结合 ConnectivityManagerTelephonyManager 判断:

安卓开发获取手机运营商网络类型

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public boolean isUsingMobileData(Context context) {
    ConnectivityManager cm = 
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        // 检查是否是移动网络类型(非WiFi)
        return activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
    }
    return false;
}