Android
[assembly: Dependency(typeof(NetworkStatusAndroid))]
23 namespace Test.Droid.Dependencies
24 {
25 public class NetworkStatusAndroid : INetworkStatus
26 {
27 public bool HasNetwork()
28 {
29
30 //Test();
31
32 ConnectivityManager cwjManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService);
33 bool hasNetwork = true;
34 if (cwjManager.ActiveNetworkInfo != null)
35 {
36 hasNetwork = cwjManager.ActiveNetworkInfo.IsAvailable;
37 }
38 else
39 {
40 hasNetwork = false;
41 }
42
43 return hasNetwork;
44 }
45 public string GetNetType()
46 {
47 return getCurrentNetType(Android.App.Application.Context);
48 }
49
50 /// <summary>
51 /// 获取网络类型
52 /// </summary>
53 /// <param name="context"></param>
54 /// <returns></returns>
55 public static string getCurrentNetType(Context context)
56 {
57 String type = "";
58 ConnectivityManager cm = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
59 NetworkInfo info = cm.ActiveNetworkInfo;
60 if (info == null)
61 {
62 type = "null";
63 }
64 else if (info.Type == ConnectivityType.Wifi)
65 {
66 type = "wifi";
67 }
68 else if (info.Type == ConnectivityType.Mobile)
69 {
70 int subType = (int)info.Subtype;
71 if (subType == (int)NetworkType.Cdma || subType == (int)NetworkType.Gprs
72 || subType == (int)NetworkType.Edge)
73 {
74 type = "2g";
75 }
76 else if (subType == (int)NetworkType.Umts || subType == (int)NetworkType.Hsdpa
77 || subType == (int)NetworkType.EvdoA || subType == (int)NetworkType.Evdo0
78 || subType == (int)NetworkType.EvdoB)
79 {
80 type = "3g";
81 }
82 else if (subType == (int)NetworkType.Lte)
83 {// LTE是3g到4g的过渡,是3.9G的全球标准
84 type = "4g";
85 }
86 }
87 return type;
88 }
89
90 /// <summary>获取手机wifi
91 /// </summary>
92 /// <returns></returns>
93 public string GetWifiIP()
94 {
95 string IP = String.Empty;
96 Android.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Forms.Context.GetSystemService(Context.WifiService);
97 if (wifi.IsWifiEnabled)
98 {
99 Android.Net.Wifi.WifiInfo wifiInfo = wifi.ConnectionInfo;
100 IP = Mixin.Common.StringFormat.intToIp(wifiInfo.IpAddress);
101 }
102 return IP;
103 }
104
105 /// <summary>
106 /// 获取手机IP地址
107 /// </summary>
108 /// <returns></returns>
109 public string Test()
110 {
111 IEnumeration ie = NetworkInterface.NetworkInterfaces;
112 while (ie.HasMoreElements)
113 {
114 NetworkInterface intf = ie.NextElement() as NetworkInterface;
115 IEnumeration enumIpAddr = intf.InetAddresses;
116 while (enumIpAddr.HasMoreElements)
117 {
118
119 InetAddress inetAddress = enumIpAddr.NextElement() as InetAddress;
120
121 if (!inetAddress.IsLoopbackAddress && (inetAddress as Inet4Address) != null && inetAddress.HostAddress.ToString() != "127.0.0.1")
122 {
123 return inetAddress.HostAddress.ToString();
124 }
125 }
126 }
127 return null;
128 }
129 }
130 }
UWP
[assembly: Dependency(typeof(Test.UWP.Dependencies.NetworkStatus))]
11 namespace Test.UWP.Dependencies
12 {
13 public class NetworkStatus : INetworkStatus
14 {
15 static string None = "None";
16 static string Unknown = "Unknown";
17 static string IIG = "2G";
18 static string IIIG = "3G";
19 static string IVG = "4G";
20 static string Wifi = "wifi";
21 static string Lan = "Lan";
22 /// <summary>当前应用是否联网
23 /// </summary>
24 /// <returns></returns>
25 public bool HasNetwork()
26 {
27 bool isConnected = false;
28
29 string InternetType = null;
30 ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
31 if (profile == null)
32 {
33 InternetType = NetworkStatus.None;
34 }
35 else
36 {
37 NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
38 isConnected = (cl != NetworkConnectivityLevel.None);
39 }
40 return isConnected;
41 }
42 /// <summary>
43 /// </summary>
44 /// <returns></returns>
45 public string GetWifiIP()
46 {
47 var icp = NetworkInformation.GetInternetConnectionProfile();
48
49 if (icp?.NetworkAdapter == null) return null;
50 var hostname =
51 NetworkInformation.GetHostNames()
52 .SingleOrDefault(
53 hn =>
54 hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId
55 == icp.NetworkAdapter.NetworkAdapterId);
56
57 // the ip address
58 return hostname?.CanonicalName;
59 //return null;
60 }
61 /// <summary>
62 /// 获取UWP连接类型
63 /// </summary>
64 /// <returns></returns>
65 public string GetNetType()
66 {
67 bool isConnected = false;
68
69 string InternetType = null;
70 ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
71 if (profile == null)
72 {
73 InternetType = NetworkStatus.None;
74 }
75 else
76 {
77 NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
78 isConnected = (cl != NetworkConnectivityLevel.None);
79 }
80 if (!isConnected)
81 {
82 return NetworkStatus.None;
83 }
84 if (profile.IsWwanConnectionProfile)
85 {
86 if (profile.WwanConnectionProfileDetails == null)
87 {
88 InternetType = NetworkStatus.Unknown;
89 }
90 WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
91 switch (connectionClass)
92 {
93 //2G
94 case WwanDataClass.Edge:
95 case WwanDataClass.Gprs:
96 InternetType = NetworkStatus.IIG;
97 break;
98 //3G
99 case WwanDataClass.Cdma1xEvdo:
100 case WwanDataClass.Cdma1xEvdoRevA:
101 case WwanDataClass.Cdma1xEvdoRevB:
102 case WwanDataClass.Cdma1xEvdv:
103 case WwanDataClass.Cdma1xRtt:
104 case WwanDataClass.Cdma3xRtt:
105 case WwanDataClass.CdmaUmb:
106 case WwanDataClass.Umts:
107 case WwanDataClass.Hsdpa:
108 case WwanDataClass.Hsupa:
109 InternetType = NetworkStatus.IIIG;
110 break;
111 //4G
112 case WwanDataClass.LteAdvanced:
113 InternetType = NetworkStatus.IVG;
114 break;
115 //无网
116 case WwanDataClass.None:
117 InternetType = NetworkStatus.Unknown;
118 break;
119 case WwanDataClass.Custom:
120 default:
121 InternetType = NetworkStatus.Unknown;
122 break;
123 }
124 }
125 else if (profile.IsWlanConnectionProfile)
126 {
127 InternetType = NetworkStatus.Wifi;
128 }
129 else
130 {
131 ///不是Wifi也不是蜂窝数据判断为Lan
132 InternetType = NetworkStatus.Lan;
133 }
134 return InternetType;
135 }
136 }
137 }
IOS
[assembly: Dependency(typeof(NetworkStatusIOS))]
17 namespace Test.iOS.Dependencies
18 {
19 public class NetworkStatusIOS : INetworkStatus
20 {
21
22 public bool HasNetwork()
23 {
24 //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
25 System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
26 bool hasNetWork = false;
27 NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
28 NetworkReachabilityFlags flags;
29 //获得连接的标志
30 bool didRetrieveFlags = defaultRouteReachability.TryGetFlags(out flags);
31 if (!didRetrieveFlags)
32 {
33 hasNetWork = false;
34 }
35 //根据获得的连接标志进行判断
36 bool isReachable = (flags & NetworkReachabilityFlags.Reachable) == NetworkReachabilityFlags.Reachable;
37 bool needsConnection = (flags & NetworkReachabilityFlags.ConnectionRequired) == NetworkReachabilityFlags.ConnectionRequired;
38
39 hasNetWork = (isReachable && !needsConnection);
40
41 return hasNetWork;
42 }
43
44 public string GetWifiIP()
45 {
46 //SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); //创建测试连接的引用:
47 System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
48 NetworkReachabilityFlags flags = NetworkReachabilityFlags.IsLocalAddress;
49 IsAdHocWiFiNetworkAvailable(out flags);
50 //NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
51 //defaultRouteReachability.TryGetFlags
52
53 return "";
54 }
55 public string GetNetType()
56 {
57 string strNetworkType = "";
58
59 //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
60 System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
61 bool hasNetWork = false;
62 NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
63 NetworkReachabilityFlags flags;
64 //获得连接的标志
65 bool didRetrieveFlags = defaultRouteReachability.TryGetFlags(out flags);
66 if (!didRetrieveFlags)
67 {
68 hasNetWork = false;
69 }
70
71 if ((flags & NetworkReachabilityFlags.ConnectionRequired) == 0)
72 {
73 strNetworkType = "WIFI";
74 }
75 if (
76 ((flags & NetworkReachabilityFlags.ConnectionOnDemand) != 0) ||
77 (flags & NetworkReachabilityFlags.ConnectionOnTraffic) != 0
78 )
79 {
80 if ((flags & NetworkReachabilityFlags.InterventionRequired) == 0)
81 {
82 strNetworkType = "WIFI";
83 }
84 }
85
86 if ((flags & NetworkReachabilityFlags.IsWWAN)==NetworkReachabilityFlags.IsWWAN)
87 {
88 if ((float)PlatformName.iOS > 7)
89 {
90 CoreTelephony.CTTelephonyNetworkInfo info = new CoreTelephony.CTTelephonyNetworkInfo();
91 string currentRadioAccessTechnology = info.CurrentRadioAccessTechnology;
92 if (!string.IsNullOrEmpty(currentRadioAccessTechnology))
93 {
94 if (currentRadioAccessTechnology == "CTRadioAccessTechnologyLTE")
95 {
96 strNetworkType = "4G";
97 }
98 else if (currentRadioAccessTechnology == "CTRadioAccessTechnologyEdge" ||
99 currentRadioAccessTechnology == "CTRadioAccessTechnologyGPRS"
100 )
101 {
102 strNetworkType = "2G";
103 }
104 else
105 {
106 strNetworkType = "3G";
107 }
108 }
109 }
110 else
111 {
112 if ((flags & NetworkReachabilityFlags.Reachable)== NetworkReachabilityFlags.Reachable)
113 {
114 if ((flags & NetworkReachabilityFlags.TransientConnection) == NetworkReachabilityFlags.TransientConnection)
115 {
116 if ((flags & NetworkReachabilityFlags.ConnectionRequired) == NetworkReachabilityFlags.ConnectionRequired)
117 {
118 strNetworkType = "2G";
119 }
120 else
121 {
122 strNetworkType = "3G";
123 }
124 }
125 }
126 }
127 }
128
129 return strNetworkType;
130 }
131
132 #region 方式一
133 public bool IsConnected { get; set; }
134 public void CheckNetworkConnection()
135 {
136 InternetConnectionStatus();
137 }
138
139 private void UpdateNetworkStatus()
140 {
141 if (InternetConnectionStatus())
142 {
143 IsConnected = true;
144 }
145 else if (LocalWifiConnectionStatus())
146 {
147 IsConnected = true;
148 }
149 else
150 {
151 IsConnected = false;
152 }
153 }
154
155 private event EventHandler ReachabilityChanged;
156 private void OnChange(NetworkReachabilityFlags flags)
157 {
158 var h = ReachabilityChanged;
159 if (h != null)
160 h(null, EventArgs.Empty);
161 }
162
163 private NetworkReachability defaultRouteReachability;
164 private bool IsNetworkAvailable(out NetworkReachabilityFlags flags)
165 {
166 if (defaultRouteReachability == null)
167 {
168 defaultRouteReachability = new NetworkReachability(new IPAddress(0));
169 //defaultRouteReachability.SetCallback(OnChange);
170 defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
171 }
172 if (!defaultRouteReachability.TryGetFlags(out flags))
173 return false;
174 return IsReachableWithoutRequiringConnection(flags);
175 }
176
177 private NetworkReachability adHocWiFiNetworkReachability;
178 private bool IsAdHocWiFiNetworkAvailable(out NetworkReachabilityFlags flags)
179 {
180 if (adHocWiFiNetworkReachability == null)
181 {
182 adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte[] { 169, 254, 0, 0 }));
183 //adHocWiFiNetworkReachability.SetCallback(OnChange);
184 adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
185 }
186
187 if (!adHocWiFiNetworkReachability.TryGetFlags(out flags))
188 return false;
189
190 return IsReachableWithoutRequiringConnection(flags);
191 }
192
193 public static bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags)
194 {
195 // Is it reachable with the current network configuration?
196 bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0;
197
198 // Do we need a connection to reach it?
199 bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0;
200
201 // Since the network stack will automatically try to get the WAN up,
202 // probe that
203 if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
204 noConnectionRequired = true;
205
206 return isReachable && noConnectionRequired;
207 }
208
209 private bool InternetConnectionStatus()
210 {
211 NetworkReachabilityFlags flags;
212 bool defaultNetworkAvailable = IsNetworkAvailable(out flags);
213 if (defaultNetworkAvailable && ((flags & NetworkReachabilityFlags.IsDirect) != 0))
214 {
215 return false;
216 }
217 else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
218 {
219 return true;
220 }
221 else if (flags == 0)
222 {
223 return false;
224 }
225
226 return true;
227 }
228
229 private bool LocalWifiConnectionStatus()
230 {
231 NetworkReachabilityFlags flags;
232 if (IsAdHocWiFiNetworkAvailable(out flags))
233 {
234 if ((flags & NetworkReachabilityFlags.IsDirect) != 0)
235 return true;
236 }
237 return false;
238 }
239
240
241
242 #endregion
243
244 #region 方式二
245
246 #endregion
247 }
248 }