在程序开发中,我们一般都会进行网络交互,那么这时对网络连接的信息判断以及状态的监听,就比较重要了。下面我直接给出代码,通过代码很容易理解如何判断和监听网络状态。
判断网路状态使用如下代码:
private bool IsConnectedToInternet()
{
bool connected = false;
ConnectionProfile cp = NetworkInformation.GetInternetConnectionProfile();
if (cp != null)
{
NetworkConnectivityLevel cl = cp.GetNetworkConnectivityLevel();
connected = cl == NetworkConnectivityLevel.InternetAccess;
}
return connected;
}
NetworkInformation 类属于static类,里面的方法也是static的,所以,这里通过直接访问GetInternetConnectionProfile 方法,获得网络连接信息,然后根据NetworkConnectivityLevel 来区分网络的链接状态。
NetworkConnectivityLevel 的定义如下。
// 摘要:
// 定义当前可用连接的级别。
[Version(100794368)]
public enum NetworkConnectivityLevel
{
// 摘要:
// 无连接。
None = 0,
//
// 摘要:
// 仅本地网络访问。
LocalAccess = 1,
//
// 摘要:
// 受限的 internet 访问。
ConstrainedInternetAccess = 2,
//
// 摘要:
// 本地和 internet 访问。
InternetAccess = 3,
}
方法一:监听网络状态的改变,则使用如下代码,并结合上面的代码。通过监听NetworkStatusChanged 事件即可,当网络状态发生改变时,该事件会被触发
NetworkInformation.NetworkStatusChanged += (object sener) =>
{
if (!IsConnectedToInternet())
{
// 网络不可以访问
}
else
{
// 网络可以访问
}
};
方法二:
使用的时候可以这样实现:
HttpClient httpClient = new HttpClient();
if (NetworkHelper.IsConnectedToInternet())
{
HttpResponseMessage response = await httpClient.PostAsync(new Uri(serverUri), new StringContent(postData));
if (response.StatusCode == HttpStatusCode.OK)
{
// TODO: 处理返回的结果
}
// ...
}
winphone中判断网络链接状况
public static string GetNetStates()
{
var info = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;
switch (info)
{
case NetworkInterfaceType.MobileBroadbandCdma:
return "CDMA";
case NetworkInterfaceType.MobileBroadbandGsm:
return "CSM";
case NetworkInterfaceType.Wireless80211:
return "WiFi";
case NetworkInterfaceType.Ethernet:
return "Ethernet";
case NetworkInterfaceType.None:
return "none";
default:
return "Other";
}
}