Windows Phone 8 获取与监听网络连接状态(转)
原文地址:http://www.cnblogs.com/sonic1abc/archive/2013/04/02/2995196.html
现在的只能手机对网络的依赖程度都很高,尤其是新闻、微博、音乐、视频、VOIP通话、游戏等 事实性高的信息类应用,但是目前国内的信息费仍然高居不下,更多的用户只有在 WIFI 的环境下才愿意进行大数据量的流量从而节约流量费用。然而为了使我们的应用更加贴心、更加人性化,如何让我们的应用为用户省钱呢?今天为大家介绍下如何在 Windows Phone8 中获取和监听网络连接状态。
首先在Windows Phone中可以使用 Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType 来获取应用的网络连接状态。

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";
}
//return null;
}

通过以上代码肯定有同学觉得不够,因为不能看到当前的连接究竟是一个 2G 3G 甚至是4G的连接,WIFI 连接的是什么状态。
这时候我们可以通过 DeviceNetworkInformation.ResolveHostNameAsync 来访问一个连接获取更多信息。



public void GetNetName()
{
DeviceNetworkInformation.ResolveHostNameAsync(
new DnsEndPoint("www.microsoft.com", 80),
new NameResolutionCallback(handle =>
{
NetworkInterfaceInfo info = handle.NetworkInterface;
if (info != null)
{
Name = info.InterfaceName + " " + info.Description + " "; switch (info.InterfaceType)
{
case NetworkInterfaceType.Ethernet:
NetName = "Ethernet";
break;
case NetworkInterfaceType.MobileBroadbandCdma:
case NetworkInterfaceType.MobileBroadbandGsm:
switch (info.InterfaceSubtype)
{
case NetworkInterfaceSubType.Cellular_3G:
NetName = "Cellular_3G + 3G";
break;
case NetworkInterfaceSubType.Cellular_EVDO:
NetName = "Cellular_EVDO + 3G";
break;
case NetworkInterfaceSubType.Cellular_EVDV:
NetName = "Cellular_EVDV + 3G";
break;
case NetworkInterfaceSubType.Cellular_HSPA:
NetName = "Cellular_HSPA + 3G";
break;
case NetworkInterfaceSubType.Cellular_GPRS:
NetName = "Cellular_GPRS + 2G";
break;
case NetworkInterfaceSubType.Cellular_EDGE:
NetName = "Cellular_EDGE + 2G";
break;
case NetworkInterfaceSubType.Cellular_1XRTT:
NetName = "Cellular_1XRTT + 2G";
break;
default:
NetName = "None";
break;
}
break;
case NetworkInterfaceType.Wireless80211:
NetName = "WiFi";
break;
default:
NetName = "None";
break;
}
}
else
NetName = "None"; Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show(Name + NetName); });
//MessageBox.Show(NetName); }), null);
}


相信以上信息 相信已经有很多朋友再应用中已经使用了 我在这里给大家总结一下,其次还有一个场景就是在网络条件发生变化的时候,比在从室内走到室外, WIFI 条件下自动切换到蜂窝网连接。
这里在我们的模拟器中也可以模拟这个场景 VS- tools – simulation dashboard.

其次我们要在 APP 的 Launching 的事件中注册监听NetworkInformation.NetworkStatusChanged 事件激发这个事件的条件分别是:
- 当手机和 Wi-Fi 之间的连接类型改变时。
- 当用户进入或离开漫游状态时。
- 当 ApproachingDataLimit 或 OverDataLimit 变为 true 时。

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
NetworkInformation.NetworkStatusChanged += (object sener) =>
{
Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show("NetworkStatusChanged"); });
};
}


另外我们可以在 NetworkStatusChanged 之后获取 NetworkInformation 类的静态 GetInternetConnectionProfile方法
NetworkCostType CostType = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost().NetworkCostType;


可以依据下表数据连接状态对应用进行优化处理。

Windows Phone 8 获取与监听网络连接状态(转)的更多相关文章
- flex 监听网络连接情况
NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); private ...
- Android实时监听网络状态(2)
在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityMana ...
- Android开发之使用广播监听网络状态变化
我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...
- Android 动态监听网络 断网重连
需求: 网络连接断开 弹出popupwindow 当前网络连接断开 网络恢复时popupwindow 消失重新请求网络. 需求描述完毕 上一张帅图 思路:广播 发送及时消息 断网flag popup ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
- 10.22 tcpdump:监听网络流量
[功能说明] tcpdump命令是一个截获网络数据包的包分析工具.tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析.它支持针对网络层.协议.主机.端口等的过滤,并支持与.或.非逻辑 ...
- IOS-网络(监听网络状态)
// // BWNetWorkTool.h // IOS_0131_检测网络状态 // // Created by ma c on 16/1/31. // Copyright © 2016年 博文科技 ...
- 通过BroadCast与service时时监听网络变化
首先需要一个service: 这里我定义了一个NetworkStateService,在这个service中我写了一个BroadcastReceiver用于监听网络状态发生改变的情况并在这个servi ...
- android动态注册监听网络变化异常
在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...
随机推荐
- angular ng-repeat点击切换样式,浅谈track by $index
前言 angular ng-repeat点击切换样式,ng-repeat点击切换class样式,巧用ng-repeat track by $index. 1.问题 一个ul包含多个li,li通过ng- ...
- 24.ArrayBuffer
ArrayBuffer ArrayBuffer ArrayBuffer对象.TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口.这些对象早就存在,属于独立 ...
- ASP.NET Core (二):入门
上一篇:ASP.NET Core(一):简介 下一篇:(待续) 英文原版:Getting Started 1. 安装 .NET Core 2. 创建 .NET Core 项目 在命令提示符窗口输入命令 ...
- [转]Magento 2 and 1 Million Products
本文转自:https://www.goivvy.com/blog/magento-2-1-million-products Can Magento 2 handle 1 million product ...
- C++虚析构函数解析
当派生类对象从内存中撤销时一般先运行派生类的析构函数,然后再调用基类的析构函数. 如果用new运算符建立的派生类的临时对象,对指向基类的指针指向这个临时对象当用delete运算符撤销对象时,系统执行的 ...
- 【MongoDB-query查询条件】
在上一篇中简要使用了C# 对MongoDB进行数据操作,这里补充一些MongoDB query查询条件文档: Query.All("name", "a",&qu ...
- winform窗体 控件【公共控件】
Button 按钮 布局 AutoSize 自动匹配尺寸 Location 确定控件位置,相对左上角坐标 Margin 控件与控件之间的距离 Size ...
- SQL Server优化查询
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- Java static和final
java提高篇(七)-----关键字static static 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静 ...
- RocketMQ NameServer
NameServer 路由管理,服务注册,服务发现.(类比为soa框架中的zookeeper) 一.路由管理 1.路由注册,由 Broker 向 NameServer 发送心跳,NameServer ...