用手机全屏看B站视频时可以看到右上角标识有WIFI,比较好奇如何检测当前网络连接是wifi还是数据网络什么的。于是百度相关信息,找到参考文献1-2,其中介绍采用Xamarin.Essentials检测网络连接性,其中的Connectivity类可用于监视设备的网络状况是否发生变化,检查当前的网络访问权限,以及当前的连接方式,最后的连接方式可通过Connectivity类的ConnectionProfiles属性获取,该属性为枚举类型集合,枚举选项包括以下几类,其中就包括WiFi连接。
于是创建了Winform项目准备测试,代码也比较简单,结果运行过程中报如下错误,看错误内容应该是未在当前平台中实现Xamarin.Essentials命名空间中调用的函数。
然后再去查看Xamarin.Essentials支持的操作系统,如下图所示。Xamarin.Essentials 可为开发人员提供其移动应用程序的跨平台 API,开发人员可以利用 Xamarin 访问 C# 中的所有 API。 Xamarin.Essentials 提供了适用于任何 Xamarin.Forms、Android、iOS 或 UWP 应用程序的单一跨平台 API,不管如何创建用户界面,都可以通过共享代码进行访问。
由上可知,Xamarin.Essentials的功能虽然强大,但主要还是面对移动平台,无法在windows操作系统中调用。要想获取网络连接信息,还得继续百度。
另一种百度出来的常用方法是调用操作系统中winInet.dll的InternetGetConnectedState函数获取本地系统的网络连接状态,关于该函数的详细介绍请见参考文献3,本文基于参考文献4中的示例代码进行函数测试,程序运行效果如下面2图所示。
如果只是检测网络是否连接,还可以采用调用ping或者调用System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable函数的方式,在此不在详述,有兴趣的可以自行百度。
本文最初的疑问其实还未解决,只是记录了解决过程中的一些检索和测试思路,后续还会继续查找如何检测当前网络连接是wifi还是数据网络什么的。
参考文献:
[1]https://learn.microsoft.com/zh-cn/training/modules/consume-rest-services/2-detect-network-connectivity
[2]https://learn.microsoft.com/zh-cn/xamarin/essentials/connectivity?context=xamarin%2Fandroid&tabs=android
[3]https://baike.baidu.com/item/InternetGetConnectedState/6513260?fr=aladdin
[4]https://www.cnblogs.com/Tpf386/p/16516782.html