在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"; }
如果想要看源码请:点击打开链接
如果想要转载请注明转载出处,请尊重原创。