C# 如何在Windows Phone 8.1运行时获取连接和运营商信息
我目前正在将我的一个库移植到Windows Phone 8.1运行时,并进入了一个缺失的API,您可以在Windows Phone 8.0和Windows Phone Silverlight 8.1应用程序中使用该API 我需要的是设备网络信息,以获取设备连接到internet的网络接口类型 Windows Phone 8.0中的示例代码C# 如何在Windows Phone 8.1运行时获取连接和运营商信息,c#,windows-phone-8,windows-phone-8.1,C#,Windows Phone 8,Windows Phone 8.1,我目前正在将我的一个库移植到Windows Phone 8.1运行时,并进入了一个缺失的API,您可以在Windows Phone 8.0和Windows Phone Silverlight 8.1应用程序中使用该API 我需要的是设备网络信息,以获取设备连接到internet的网络接口类型 Windows Phone 8.0中的示例代码 public void GetDeviceConnectionInfo() { DeviceNetworkInformation.ResolveHos
public void GetDeviceConnectionInfo()
{
DeviceNetworkInformation.ResolveHostNameAsync(new DnsEndPoint("microsoft.com", 80),
nrr =>
{
NetworkInterfaceInfo info = nrr.NetworkInterface;
if (info != null)
{
switch (info.InterfaceType)
{
case NetworkInterfaceType.Ethernet:
// Do something
break;
case NetworkInterfaceType.MobileBroadbandCdma:
case NetworkInterfaceType.MobileBroadbandGsm:
switch (info.InterfaceSubtype)
{
case NetworkInterfaceSubType.Cellular_3G:
case NetworkInterfaceSubType.Cellular_EVDO:
case NetworkInterfaceSubType.Cellular_EVDV:
case NetworkInterfaceSubType.Cellular_HSPA:
// Do something
break;
}
// Do something
break;
case NetworkInterfaceType.Wireless80211:
// Do something
break;
}
}
}, null);
}
您可以使用
设备网络信息访问运营商的名称。CellularMobileOperator
它并不完全相同,但我们可以在Windows 8.1中像在早期版本中一样检测网络类型,只是名称空间和类不同
有效地,而不是访问有关网络连接的详细信息,您可以根据网络连接调整您的行为。基本上,如果用户的连接几乎没有计量功能,你可以做你喜欢做的事情,但是如果他们在数据计划中,或者在某个地方打电话到互联网会给用户带来费用,你应该提示他们,或者以不同的方式处理。可能要等到Wifi或以太网可用 如果您对有关网络的技术信息感兴趣,我能找到的最好的信息是
ConnectionProfile.NetworkAdapter
类的属性。您可以像这样获得ConnectionProfile
类的实例(取自此):
在NetworkAdapter
类中,您拥有IanaInterfaceType
、InboundMaxBitsPerSecond
和OutboundMaxBitsPerSecond
等属性,这些属性让您非常清楚网络的速度。例如,IEEE802.11WiFi的IanaInterfaceType为71…您可以在此处查看更多详细信息:和
编辑:以下是完整的列表编辑:以下建议适用于Windows Phone 8.1应用程序 我不建议使用
IanaInterfaceType
、InboundMaxBitsPerSecond
或OutboundMaxBitsPerSecond
来确定连接类型,因为它们非常不准确
以下方法获取WP状态栏中显示的连接类型。请注意,连接模式不一定表示上载/下载速度
using Windows.Networking.Connectivity;
/// <summary>
/// Detect the current connection type
/// </summary>
/// <returns>
/// 2 for 2G, 3 for 3G, 4 for 4G
/// 100 for WiFi
/// 0 for unknown or not connected</returns>
private static byte GetConnectionGeneration()
{
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
if (profile.IsWwanConnectionProfile)
{
WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
switch (connectionClass)
{
//2G-equivalent
case WwanDataClass.Edge:
case WwanDataClass.Gprs:
return 2;
//3G-equivalent
case WwanDataClass.Cdma1xEvdo:
case WwanDataClass.Cdma1xEvdoRevA:
case WwanDataClass.Cdma1xEvdoRevB:
case WwanDataClass.Cdma1xEvdv:
case WwanDataClass.Cdma1xRtt:
case WwanDataClass.Cdma3xRtt:
case WwanDataClass.CdmaUmb:
case WwanDataClass.Umts:
case WwanDataClass.Hsdpa:
case WwanDataClass.Hsupa:
return 3;
//4G-equivalent
case WwanDataClass.LteAdvanced:
return 4;
//not connected
case WwanDataClass.None:
return 0;
//unknown
case WwanDataClass.Custom:
default:
return 0;
}
}
else if (profile.IsWlanConnectionProfile)
{
return 100;
}
return 0;
}
我似乎在windows phone 8.1上可用windows phone 8.1运行时应用程序似乎无法使用名称空间,但Silverlight 8.1Hi Liam可以使用名称空间,感谢您的回答,我将检查信息并尽快返回。好的,我从两个答案中都得到了这个想法,但我发现用合理的方法和属性来反对Microsoft.Phone名称空间是非常愚蠢的。你知道如何获取运营商信息吗?我好像找不到它。
using Windows.Networking.Connectivity;
/// <summary>
/// Detect the current connection type
/// </summary>
/// <returns>
/// 2 for 2G, 3 for 3G, 4 for 4G
/// 100 for WiFi
/// 0 for unknown or not connected</returns>
private static byte GetConnectionGeneration()
{
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
if (profile.IsWwanConnectionProfile)
{
WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
switch (connectionClass)
{
//2G-equivalent
case WwanDataClass.Edge:
case WwanDataClass.Gprs:
return 2;
//3G-equivalent
case WwanDataClass.Cdma1xEvdo:
case WwanDataClass.Cdma1xEvdoRevA:
case WwanDataClass.Cdma1xEvdoRevB:
case WwanDataClass.Cdma1xEvdv:
case WwanDataClass.Cdma1xRtt:
case WwanDataClass.Cdma3xRtt:
case WwanDataClass.CdmaUmb:
case WwanDataClass.Umts:
case WwanDataClass.Hsdpa:
case WwanDataClass.Hsupa:
return 3;
//4G-equivalent
case WwanDataClass.LteAdvanced:
return 4;
//not connected
case WwanDataClass.None:
return 0;
//unknown
case WwanDataClass.Custom:
default:
return 0;
}
}
else if (profile.IsWlanConnectionProfile)
{
return 100;
}
return 0;
}
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
string apn = profile.WwanConnectionProfileDetails.AccessPointName;