现在的只能手机对网络的依赖程度都很高,尤其是新闻、微博、音乐、视频、VOIP通话、游戏等 事实性高的信息类应用,但是目前国内的信息费仍然高居不下,更多的用户只有在 WIFI 的环境下才愿意进行大数据量的流量从而节约流量费用。然而为了使我们的应用更加贴心、更加人性化,如何让我们的应用为用户省钱呢?今天为大家介绍下如何在 Windows Phone8 中获取和监听网络连接状态。

首先在Windows Phone中可以使用

  1. Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType

来获取应用的网络连接状态。

  1. public static string GetNetStates()
  2. {
  3. var info = Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType;
  4. switch (info)
  5. {
  6. case NetworkInterfaceType.MobileBroadbandCdma:
  7. return "CDMA";
  8. case NetworkInterfaceType.MobileBroadbandGsm:
  9. return "CSM";
  10. case NetworkInterfaceType.Wireless80211:
  11. return "WiFi";
  12. case NetworkInterfaceType.Ethernet:
  13. return "Ethernet";
  14. case NetworkInterfaceType.None:
  15. return "None";
  16. default:
  17. return "Other";
  18. }
  19. //return null;
  20. }

通过以上代码肯定有同学觉得不够,因为不能看到当前的连接究竟是一个 2G 3G 甚至是4G的连接,WIFI 连接的是什么状态。

这时候我们可以通过 DeviceNetworkInformation.ResolveHostNameAsync 来访问一个连接获取更多信息。

  1. public void GetNetName()
  2. {
  3. DeviceNetworkInformation.ResolveHostNameAsync(
  4. new DnsEndPoint("www.microsoft.com", 80),
  5. new NameResolutionCallback(handle =>
  6. {
  7. NetworkInterfaceInfo info = handle.NetworkInterface;
  8. if (info != null)
  9. {
  10. Name = info.InterfaceName + " " + info.Description + " ";
  11. switch (info.InterfaceType)
  12. {
  13. case NetworkInterfaceType.Ethernet:
  14. NetName = "Ethernet";
  15. break;
  16. case NetworkInterfaceType.MobileBroadbandCdma:
  17. case NetworkInterfaceType.MobileBroadbandGsm:
  18. switch (info.InterfaceSubtype)
  19. {
  20. case NetworkInterfaceSubType.Cellular_3G:
  21. NetName = "Cellular_3G + 3G";
  22. break;
  23. case NetworkInterfaceSubType.Cellular_EVDO:
  24. NetName = "Cellular_EVDO + 3G";
  25. break;
  26. case NetworkInterfaceSubType.Cellular_EVDV:
  27. NetName = "Cellular_EVDV + 3G";
  28. break;
  29. case NetworkInterfaceSubType.Cellular_HSPA:
  30. NetName = "Cellular_HSPA + 3G";
  31. break;
  32. case NetworkInterfaceSubType.Cellular_GPRS:
  33. NetName = "Cellular_GPRS + 2G";
  34. break;
  35. case NetworkInterfaceSubType.Cellular_EDGE:
  36. NetName = "Cellular_EDGE + 2G";
  37. break;
  38. case NetworkInterfaceSubType.Cellular_1XRTT:
  39. NetName = "Cellular_1XRTT + 2G";
  40. break;
  41. default:
  42. NetName = "None";
  43. break;
  44. }
  45. break;
  46. case NetworkInterfaceType.Wireless80211:
  47. NetName = "WiFi";
  48. break;
  49. default:
  50. NetName = "None";
  51. break;
  52. }
  53. }
  54. else
  55. NetName = "None";
  56. Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show(Name + NetName); });
  57. //MessageBox.Show(NetName);
  58. }), null);
  59. }

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

这里在我们的模拟器中也可以模拟这个场景 VS- tools – simulation dashboard.

其次我们要在 APP 的 Launching 的事件中注册监听NetworkInformation.NetworkStatusChanged 事件激发这个事件的条件分别是:

  1. 当手机和 Wi-Fi 之间的连接类型改变时。
  2. 当用户进入或离开漫游状态时。
  3. 当 ApproachingDataLimit 或 OverDataLimit 变为 true 时。
  1. // Code to execute when the application is launching (eg, from Start)
  2. // This code will not execute when the application is reactivated
  3. private void Application_Launching(object sender, LaunchingEventArgs e)
  4. {
  5. NetworkInformation.NetworkStatusChanged += (object sener) =>
  6. {
  7. Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show("NetworkStatusChanged"); });
  8. };
  9. }

另外我们可以在 NetworkStatusChanged  之后获取 NetworkInformation 类的静态 GetInternetConnectionProfile方法

  1. NetworkCostType CostType = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost().NetworkCostType;

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

欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick

转载于:https://blog.51cto.com/nick287/1169107

Windows Phone 8 获取与监听网络连接状态相关推荐

  1. Android 监听网络连接状态,判断网络连接方式,9.0网络连接,获取已连接WiFi名称SSID和MAC

    获取已连接的WiFi名称 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> ...

  2. java监听网络连接_Android RxJava 之网络链接监听示范

    RxJava在stream events处理上真的是一个利器.下面的示范代码显示如何用它来监听android设备的网络连接状况,实时接收change信息. IntentFilter filter = ...

  3. 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓网络连接情况全解:包括网络连接状态的监听.网络数据使用状态的监听.获取当前网络连接情况.启动wifi.获取当前连接wifi的网络情况.扫描wifi ...

  4. Android实时监听网络状态

    Android开发实时监听网络状态变化一般有两种方法: 1. 新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页 ...

  5. 4.1.3.9 监听网络状态,3G,WIFI,

    注意了:android.net.conn.CONNECTIVITY_CHANGE 是用来监听网络变化的就是ConnectivityManager.CONNECTIVITY_ACTION 监听网络的状态 ...

  6. Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态

    原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...

  7. Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态...

    原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...

  8. 10.22 tcpdump:监听网络流量

    [功能说明] tcpdump命令是一个截获网络数据包的包分析工具.tcpdump可以将网络中传送的数据包的"头"完全截获下来以提供分析.它支持针对网络层.协议.主机.端口等的过滤, ...

  9. android 监听网络状态

    今天,讲讲怎么监听手机网络状态的改变. 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:nam ...

最新文章

  1. Python3多线程threading介绍(转载)
  2. opencv cv::mat::data是什么数据类型?
  3. 24/100. Linked List Cycle
  4. java se程序设计_JavaSE--Java 的基本程序设计结构
  5. ip访问次数统计 nginx_PHP实现IP访问限制及提交次数的方法详解
  6. Visual Studio 2013 Xamarin for iOS 环境搭建
  7. ajax json的参数,java ajax json参数
  8. 苹果要弃用LCD屏,便宜的iPhone XR面临绝版
  9. Embeded linux之地址映射
  10. 二元函数连续与偏导数存在的关系_二元函数连续、偏导数和全微分之间的关系...
  11. vue 源码学习总纲
  12. 案例介绍ps去除网纹的方法
  13. 旧项目归档:旅游年卡-旅游直通车-微信二级分销推广会员-汽车租赁-金币提现-司机乘务管理-景点线路乘车预约
  14. matlab的kron函数(kronecker乘积)
  15. React Native 版本的商米打印 Demo
  16. 【Linux服务器】登录Linux服务器后,登陆信息显示佛祖保佑、永不死机,小猪佩奇等图案
  17. 停车位检测方法研究综述
  18. 安装 Ubuntu 操作系统步骤教程
  19. Android辅助功能 Accessibility Services基本用法笔记
  20. Visual Studio2022编译报错解决方法

热门文章

  1. C++socket编程(九):9.1 UDP实战Syslog服务器
  2. postman自动打开_编写自动执行postman的脚本
  3. python读取数据文件、并把里面的数据变成x的二维坐标_(数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换...
  4. datetime类型的取年月日 sql_SQL2005怎么截取datetime类型字段的年月日,并以截取后的(年月日)字段排序...
  5. cad2010多个文件并排显示_并排查看Excel工作表只需1个小动作,工作效率大涨百倍!...
  6. SpringSecurity 跨域问题 Cors
  7. java 泛型 通配符边界和类型形参边界的区别
  8. java 泛型 类型实参(type argument)
  9. Python 格式化字符串
  10. ubuntu dpkg