我遇到一个边缘情况的问题,我希望有人可以提供帮助。我有一个Windows 8.1通用应用程序,并创建了一个商店和手机包,并尝试尽可能多地共享它们之间的代码。由于我们的应用程序需要互联网访问才能执行某些功能,因此我们需要一种可靠的方法来确定在尝试和失败功能之前。
所以最初我的代码只看了NetworkInformation.GetInternetConnectionProfile(),然后比较了GetNetworkConnectivityLevel()== NetworkConnectivityLevel.InternetAccess。这在大多数情况下都适用,但是我们在手机上找到了一个案例,其中设备是由运营商提供的数据计划,但随后被移除,因此它现在只能执行wifi数据。在这种情况下,即使wifi也显示手机仍然报告为真被关闭然后无法连接但从未报告没有可用的互联网。
所以我们将逻辑改为下面。
var internetConnection = NetworkInformation.GetInternetConnectionProfile();
// If null then no internet and internet connection is null
// If it is not null, then you have to look for any GetLanIdentfiers. This means there is a lan adapter setup.
// lastly you have to make sure the interface type is either an Ethernet or IEEE 802.11 interface.
if ( internetConnection != null
&& internetConnection.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess
&& ( ( internetConnection.NetworkAdapter.IanaInterfaceType == IEEE_802_11_INTERFACE
&& NetworkInformation.GetLanIdentifiers().Any() )
|| internetConnection.NetworkAdapter.IanaInterfaceType == ETHERNET_INTERFACE ) )
{
return true;
}
return false;
正如评论所说,如果GetInternetConnectionProfile()的返回为null,则表示没有可用的连接。如果有,那么我检查IneternetAccess。然后我检查802.11&&amp ;;的IanaInterfaceType。任何LanIdentifier或以太网接口。
在运营商数据计划中但不再使用的手机上,这可以正确检测到wifi无法使用。然而,在现场,我们现在有一些商店应用客户报告该应用认为上述代码没有wifi。我们当然可以添加一个#If来包装逻辑单向或另一个但是在某些时候我们想要转移到新的通用应用程序项目,其中使用#if应该是非常罕见的,所以我想避免这种情况。
我们无法在任何测试设备上复制此问题,因此这可能是我们实验室中没有的本地环境配置。有没有其他人想出一个可靠的方法来确定手机和商店应用程序上是否有wifi?
答案 0 :(得分:0)
NetworkInformation 类中有两个属性,名为 IsWwanConnectionProfile 和 IsWlanConnectionProfile 。
第一个属性为您提供的值指示连接配置文件是否为WWAN(移动)连接,第二个属性获取的值指示连接配置文件是否为WLAN(WiFi)连接。希望这会有所帮助。