在Android开发中经常需要判断手机是wifi还是网络,但是有个别需求还得判断当前网络是2G /3G 还是4G。
判断手机是否是wifi还是手机网络可以使用NetWorkInfo的getType()方法进行判断。在手机网络的情况下,使用NetWorkInfo的getSubType()方法和TelephonyManager的常量值去比较,判断当前网络具体是何种网络类型。TelephonyManager的常量值类型可以在Android API中看下。
前段时间需要用到这个功能,于是去网上看了看,大概知道了怎么用,但是为了自己的业务还是自己写了个Demo。这里提供了两种方法进行判断当前网络是何种类型。一种是通过广播的方式进行判断,一种是实时监听网络的变化。先附两张图片看下效果:
通过广播进行判断:
切换过网络之后——->>
实时监听网络:
点击之后——->>>
不管是通过广播进行判断还是怎么判断,首先应该在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”的值你就可以根据你自己的业务来进行网络类型的判断了。
如果想要看源码请:
点击打开链接
如果想要转载请注明转载出处,请尊重原创。