Android判断当前网络类型

在Android开发中经常需要判断手机是wifi还是网络,但是有个别需求还得判断当前网络是2G /3G 还是4G。

判断手机是否是wifi还是手机网络可以使用NetWorkInfo的getType()方法进行判断。在手机网络的情况下,使用NetWorkInfo的getSubType()方法和TelephonyManager的常量值去比较,判断当前网络具体是何种网络类型。TelephonyManager的常量值类型可以在Android API中看下。

前段时间需要用到这个功能,于是去网上看了看,大概知道了怎么用,但是为了自己的业务还是自己写了个Demo。这里提供了两种方法进行判断当前网络是何种类型。一种是通过广播的方式进行判断,一种是实时监听网络的变化。先附两张图片看下效果:

通过广播进行判断:

Android判断当前网络类型_第1张图片切换过网络之后------->>Android判断当前网络类型_第2张图片


实时监听网络:

点击之后------->>>Android判断当前网络类型_第3张图片


不管是通过广播进行判断还是怎么判断,首先应该在Android工程的清单文件AndroidManifest.xml中添加权限

<!-- 网络权限 -->
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

其次如果用广播方式进行判断的话还得在清单文件中注册一个广播,就以我这个工程为例:

<receiver android:name="com.example.test.NetReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

判断网络类型的代码呢,都差不多一样,下面是关键性代码:

if (info == null) {
			type = "null";
		} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
			type = "wifi";
		} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
			int subType = info.getSubtype();
			if (subType == TelephonyManager.NETWORK_TYPE_CDMA
					|| subType == TelephonyManager.NETWORK_TYPE_GPRS
					|| subType == TelephonyManager.NETWORK_TYPE_EDGE) {
				type = "2g";
			} else if (subType == TelephonyManager.NETWORK_TYPE_UMTS
					|| subType == TelephonyManager.NETWORK_TYPE_HSDPA
					|| subType == TelephonyManager.NETWORK_TYPE_EVDO_A
					|| subType == TelephonyManager.NETWORK_TYPE_EVDO_0
					|| subType == TelephonyManager.NETWORK_TYPE_EVDO_B) {
				type = "3g";
			} else if (subType == TelephonyManager.NETWORK_TYPE_LTE) {// LTE是3g到4g的过渡,是3.9G的全球标准
				type = "4g";
			}

获取到字段“type”的值你就可以根据你自己的业务来进行网络类型的判断了。

如果想要看源码请:点击打开链接

如果想要转载请注明转载出处,请尊重原创。

你可能感兴趣的:(android,网络,手机,NetWork,网络类型)