开发中我们时长需要进行网络连接的检查,比如连接是否畅通,网络是wifi还是移动数据流量。之前我们有说过对wifi的判断,但那个只能判断wifi,如果要判断整体网络不太符合。所以今天我们总体说一下网络连接的检查。
首先我们需要几个权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
接着我们要获取到连接管理器,并获取NetworkInfo
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
最后我们通过NetworkInfo获取相关的一个网络情况。比如判断是不是wifi连接
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
}
不过NetWorkInfo的功能是很多的。我在这里进行一下罗列。
- getType:获取网络类型。网络类型的取值说明见表1
表1 | |
ConnectivityManager类的网络类型 | 说明 |
TYPE_WIFI | WiFi |
TYPE_MOBILE | 数据连接 |
TYPE_WIMAX | wimax |
TYPE_ETHERNET | 以太网 |
TYPE_BLUETOOTH | 蓝牙 |
TYPE_VPN | vpn |
- getState:获取网络状态。网络状态的取值见表2
表2 | |
NetworkInfo.State的网络状态 | 说明 |
CONNECTING | 正在连接 |
CONNECTED | 已连接 |
SUSPENDED | 挂起 |
DISCONNECTING | 正在断开 |
DISCONNECTED | 已断开 |
UNKNOWN | 未知 |
- getSubtype:获取网络子类型。当网络类型为数据连接时,子类型为2G/3G/4G的细分类型,如CMDA、EVDO、HSDPA、LTE等。网络子类型的取值见表3
表3 | ||
取值 | TelephonyManager类的网络子类型 | 制式分类 |
1 | NETWORK_TYPE_GPRS | 2G |
2 | NETWORK_TYPE_EDGE | 2G |
3 | NETWORK_TYPE_UMTS | 3G |
4 | NETWORK_TYPE_CDMA | 2G |
5 | NETWORK_TYPE_EVDO_0 | 3G |
6 | NETWORK_TYPE_EVDO_A | 3G |
7 | NETWORK_TYPE_1xRTT | 2G |
8 | NETWORK_TYPE_HSDPA | 3G |
9 | NETWORK_TYPE_HSUPA | 3G |
10 | NETWORK_TYPE_HSPA | 3G |
11 | NETWORK_TYPE_IDEN | 2G |
12 | NETWORK_TYPE_EVDO_B | 3G |
13 | NETWORK_TYPE_LTE | 4G |
14 | NETWORK_TYPE_EHRPD | 3G |
15 | NETWORK_TYPE_HSPAP | 3G |
16 | NETWORK_TYPE_GSM | 2G |
17 | NETWORK_TYPE_TD_SCDMA | 3G |
18 | NETWORK_TYPE_IWLAN | 4G |