如何检查WP8设备是否使用wifi,移动计划或漫游来加载数据

时间:2014-01-12 19:40:00

标签: c# networking windows-phone-8 windows-phone

我计划只加载应用程序中所需的数据。这意味着,当通过Wifi加载数据时,我想预取东西。如果通过移动计划甚至漫游加载数据,我想询问用户。

但是,我只找到了Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation,它提供了有关可用内容的反馈,而不是实际使用的内容。 NetworkInterface.GetInternetInterface()也可以,但不会给我详细说明它是否在漫游。

有什么办法吗?

3 个答案:

答案 0 :(得分:7)

让我自己来解决:

Data Sense API,它不仅可以检查设备是否在漫游,还可以检查应用是否接近或超过Data Sense中设置的数据限制。当提供程序不允许使用Data Sense UI时,API也可以使用。

特别是,上面链接中的代码解决了所有问题!

// Get current Internet Connection Profile.
ConnectionProfile internetConnectionProfile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();

// Check the connection details.
if (internetConnectionProfile.NetworkAdapter.IanaInterfaceType != IANA_INTERFACE_TYPE_WIFI)
{
    // Connection is not a Wi-Fi connection. 
    if (internetConnectionProfile.GetConnectionCost().Roaming)
    {
        // User is roaming. Don't send data out.
        m_bDoNotSendData = true;
    }

    if (internetConnectionProfile.GetConnectionCost().ApproachingDataLimit)
    {
        // User is approaching data limit. Send low-resolution images.
        m_bSendLowResolutionImage = true;
    }

    if (internetConnectionProfile.GetConnectionCost().OverDataLimit)
    {
        // User is over data limit. Don't send data out.
        m_bDoNotSendData = true;
    }
}
else
{   
    //Connection is a Wi-Fi connection. Data restrictions are not necessary.                        
    m_bDoNotSendData = false;
    m_bSendLowResolutionImage = false;
}

// Optionally, report the current values in a TextBox control.
string cost = string.Empty;
switch (internetConnectionProfile.GetConnectionCost().NetworkCostType)
{
    case NetworkCostType.Unrestricted:
        cost += "Cost: Unrestricted";
        break;
    case NetworkCostType.Fixed:
        cost += "Cost: Fixed";
        break;
    case NetworkCostType.Variable:
        cost += "Cost: Variable";
        break;
    case NetworkCostType.Unknown:
        cost += "Cost: Unknown";
        break;
    default:
        cost += "Cost: Error";
        break;
}
cost += "\n";
cost += "Roaming: " + internetConnectionProfile.GetConnectionCost().Roaming + "\n";
cost += "Over Data Limit: " + internetConnectionProfile.GetConnectionCost().OverDataLimit + "\n";
cost += "Approaching Data Limit : " + internetConnectionProfile.GetConnectionCost().ApproachingDataLimit + "\n";

NetworkStatus.Text = cost;

答案 1 :(得分:1)

您是否在WP8上尝试过System.Net.NetworkInformation命名空间。该软件包具有静态方法,可返回网络状态。然后,您可以根据此信息进行切换

  

NetworkInterface.NetworkInterfaceType

可以找到更多详细信息here

答案 2 :(得分:0)

手机可以同时使用3G和WiFi。我测试的情况 - 手机在找到并连接到WiFi网络后,没有关闭在3G上打开的现有TCP连接。如果打开一个新的TCP连接,它将使用WiFi。

来自Microsoft.Phone.dll的SocketExtensions.GetCurrentNetworkInterface扩展方法告诉您哪个接口用于指定的套接字。