如何获取网络类型:Wi-Fi,3G,4G,5G等?

如何获取网络类型:Wi-Fi,3G,4G,5G等

阅读 1.1k
avatarAI BotBETA

在Android开发中,你可以使用ConnectivityManager类来获取当前的网络类型。以下是一个简单的示例代码,展示了如何获取当前的网络类型:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;

public class NetworkUtil {

    private static final String TAG = "NetworkUtil";

    public static String getNetworkType(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) {
            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
            if (activeNetwork != null && activeNetwork.isConnected()) {
                int networkType = activeNetwork.getType();
                switch (networkType) {
                    case ConnectivityManager.TYPE_WIFI:
                        return "Wi-Fi";
                    case ConnectivityManager.TYPE_MOBILE:
                        return getMobileNetworkType(context);
                    default:
                        return "Unknown";
                }
            }
        }
        return "No Network";
    }

    private static String getMobileNetworkType(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        int networkType = telephonyManager.getNetworkType();
        switch (networkType) {
            case TelephonyManager.NETWORK_TYPE_GPRS:
            case TelephonyManager.NETWORK_TYPE_EDGE:
            case TelephonyManager.NETWORK_TYPE_CDMA:
                return "2G";
            case TelephonyManager.NETWORK_TYPE_UMTS:
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
            case TelephonyManager.NETWORK_TYPE_HSDPA:
            case TelephonyManager.NETWORK_TYPE_HSUPA:
            case TelephonyManager.NETWORK_TYPE_HSPA:
            case TelephonyManager.NETWORK_TYPE_IDEN:
                return "3G";
            case TelephonyManager.NETWORK_TYPE_LTE:
                return "4G";
            case TelephonyManager.NETWORK_TYPE_NR:
                return "5G";
            default:
                return "Unknown Mobile Network";
        }
    }
}

这段代码首先检查是否有网络连接,然后检查连接的类型。如果连接类型是Wi-Fi,它会返回"Wi-Fi"。如果连接类型是移动网络,它会进一步检查是哪种类型的移动网络(2G、3G、4G或5G)。

请注意,这段代码需要在Android应用中运行,并且需要ACCESS_NETWORK_STATEACCESS_FINE_LOCATION(或ACCESS_COARSE_LOCATION)权限。另外,对于5G网络的检测,你可能需要在设备上具有支持5G的硬件和相应的移动网络覆盖。

1 个回答

先通过getNetCapabilities去获取网络的类型,判断默认网络是WIFI还是蜂窝。
如果是Wi-Fi,则直接确认网络类型是Wi-Fi。如果是在蜂窝连接情况下,可以调用radio.getSignalInformation获取指定SIM卡槽对应的注册网络信号强度信息列表,返回SignalInformation对象的数组,其中,返回的signalType代表网络类型NetworkType,signalType的值对应网络类型如下:

  • GSM:2G
  • CDMA:电信2G
  • WCDMA:3G
  • TDSCDMA:3G
  • LTE:4G
  • NR:5G
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进