如何获取网络类型:Wi-Fi,3G,4G,5G等
在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_STATE
和ACCESS_FINE_LOCATION
(或ACCESS_COARSE_LOCATION
)权限。另外,对于5G网络的检测,你可能需要在设备上具有支持5G的硬件和相应的移动网络覆盖。
先通过getNetCapabilities去获取网络的类型,判断默认网络是WIFI还是蜂窝。
如果是Wi-Fi,则直接确认网络类型是Wi-Fi。如果是在蜂窝连接情况下,可以调用radio.getSignalInformation获取指定SIM卡槽对应的注册网络信号强度信息列表,返回SignalInformation对象的数组,其中,返回的signalType代表网络类型NetworkType,signalType的值对应网络类型如下: