我计划只加载应用程序中所需的数据。这意味着,当通过Wifi加载数据时,我想预取东西。如果通过移动计划甚至漫游加载数据,我想询问用户。
但是,我只找到了Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation,它提供了有关可用内容的反馈,而不是实际使用的内容。 NetworkInterface.GetInternetInterface()也可以,但不会给我详细说明它是否在漫游。
有什么办法吗?
答案 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
扩展方法告诉您哪个接口用于指定的套接字。