判断当前网络类型

判断当前网络类型

	public final static int NONE = 0;	//
	public final static int WIFI = 1;	//
	public final static int MOBILE = 2; // 3G GPRS
	public final static int ETHERNET = 3;//
	
	public static int getNetworkState(Context context)
	{
		ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
		
		State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).getState();
		if(state == State.CONNECTED || state == State.CONNECTING)
		{
			return ETHERNET;
		}
		
		state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
		if(state == State.CONNECTED || state == State.CONNECTING)
		{
			return WIFI;
		}
		state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
		if(state == State.CONNECTED || state == State.CONNECTING)
		{
			return MOBILE;
		}
				
		return NONE;
		
	}


### 在安卓14系统中判断当前网络类型、获取信号强度、联网的SIM卡名称和WIFI名称,并将结果显示到TextView #### 判断当前网络类型 在安卓14中,可以通过`ConnectivityManager`来判断当前网络类型。以下是实现代码: ```java ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Network network = connectivityManager.getActiveNetwork(); NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network); if (networkCapabilities != null) { if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { Log.i("TAG", "当前网络类型: WIFI"); } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { Log.i("TAG", "当前网络类型: 移动数据"); } } ``` #### 获取WIFI名称 通过`WifiManager`可以获取当前连接的WIFI名称(SSID)。 ```java WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifiManager != null) { String ssid = wifiManager.getConnectionInfo().getSSID(); // 获取WIFI名称[^1] Log.i("TAG", "当前WIFI名称: " + ssid); } ``` #### 获取移动数据信号强度和联网的SIM卡名称 在安卓14中,可以通过`TelephonyManager`获取移动数据的信号强度和SIM卡信息。 ```java TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager != null) { SignalStrength signalStrength = telephonyManager.getAllCellInfo() .stream() .filter(cellInfo -> cellInfo instanceof CellInfoGsm || cellInfo instanceof CellInfoLte || cellInfo instanceof CellInfoNr) .map(cellInfo -> ((CellSignalStrength) cellInfo.getCellSignalStrength())) .findFirst() .orElse(null); if (signalStrength != null) { int dbm = signalStrength.getDbm(); // 获取信号强度(dBm) Log.i("TAG", "移动数据信号强度: " + dbm + " dBm"); } SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); List<SubscriptionInfo> subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); if (subscriptionInfoList != null && !subscriptionInfoList.isEmpty()) { for (SubscriptionInfo subscriptionInfo : subscriptionInfoList) { String simOperatorName = subscriptionInfo.getCarrierName().toString(); // 获取SIM卡运营商名称[^2] Log.i("TAG", "联网的SIM卡名称: " + simOperatorName); } } } ``` #### 绑定到TextView控件 将上述获取的信息绑定到`TextView`控件上,可以通过以下方式实现: ```java TextView textView = findViewById(R.id.textView); String networkType = networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ? "WIFI" : "移动数据"; String info = "当前网络类型: " + networkType + "\n" + "当前WIFI名称: " + ssid + "\n" + "移动数据信号强度: " + dbm + " dBm\n" + "联网的SIM卡名称: " + simOperatorName; textView.setText(info); ``` #### 注意事项 - 在安卓10及以上版本中,需要动态请求权限以访问蜂窝网络信息和WIFI信息。 - 必须在`AndroidManifest.xml`文件中声明以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值