NetWorkStateReceiver.java
3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.cnlive.goldenline.util;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.util.Log;
/**
* Created by gujun on 2017/3/23.
*/
public class NetWorkStateReceiver extends BroadcastReceiver {
private final String TAG = "NetWorkStateReceiver";
public static final int ONLY_MOBILE_CONNECT = 0x4001;
public static final int ONLY_WIFI_CONNECT = 0x4002;
public static final int NO_CONNECT = 0x4003;
private NetStateListener l;
public NetWorkStateReceiver(NetStateListener listener) {
this.l = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: 网络状态发生变化");
//检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
//获得ConnectivityManager对象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取ConnectivityManager对象对应的NetworkInfo对象
//获取WIFI连接的信息
NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//获取移动数据连接的信息
NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifiNetworkInfo.isConnected()) {
if (l != null)
l.onNetStateChange(ONLY_WIFI_CONNECT);
} else if (dataNetworkInfo.isConnected()) {
if (l != null)
l.onNetStateChange(ONLY_MOBILE_CONNECT);
} else {
if (l != null)
l.onNetStateChange(NO_CONNECT);
}
//API大于23时使用下面的方式进行网络监听
} else {
Log.d(TAG, "onReceive: API level 大于23");
//获得ConnectivityManager对象
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取所有网络连接的信息
Network[] networks = connMgr.getAllNetworks();
//用于存放网络连接信息
StringBuilder sb = new StringBuilder();
//通过循环将网络信息逐个取出来
for (int i = 0; i < networks.length; i++) {
//获取ConnectivityManager对象对应的NetworkInfo对象
NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);
sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());
if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE && networkInfo.isConnected()) {
if (l != null)
l.onNetStateChange(ONLY_MOBILE_CONNECT);
} else if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
if (l != null)
l.onNetStateChange(ONLY_WIFI_CONNECT);
} else {
if (l != null)
l.onNetStateChange(NO_CONNECT);
}
}
}
}
public interface NetStateListener {
void onNetStateChange(int state);
}
}