从WinRT获取Internet连接状态

时间:2014-03-23 11:13:16

标签: c# windows-runtime microsoft-metro windows-store-apps

以下代码我已经使用了一段时间来获取运行我的商店应用的设备的连接状态。最近似乎发生的事情是,虽然它仍然找到了正确的连接配置文件,但它将该级别返回为Local,而不是Internet访问。

IReadOnlyList<ConnectionProfile> p = NetworkInformation.GetConnectionProfiles();

foreach (ConnectionProfile prof in p)
{
    NetworkConnectivityLevel lev = prof.GetNetworkConnectivityLevel();
    if (lev == NetworkConnectivityLevel.InternetAccess)
    {
        return true;
    }
}
return false;

任何人都可以告诉我为什么会这样,以及我如何能说服我,事实上,我有一个有效的互联网连接(我可以通过发布这个问题来证明:-))?

1 个答案:

答案 0 :(得分:1)

尝试这个

private bool roaming;
    private string connectionProfileInfo;

    private async Task<bool> IsConnectedToInternet()
    {
        HttpWebRequest webReq;
        HttpWebResponse resp = null;
       // HttpStatusCode respcode;
        Uri url = null;
        url = new Uri("http://www.dartinnovations.com");
        webReq = (HttpWebRequest)WebRequest.Create(url);
        try
        {
            resp = (HttpWebResponse)await webReq.GetResponseAsync();
          //  Debug.WriteLine(resp.StatusCode);
            webReq.Abort();
            webReq = null;
            url = null;
            resp = null;
            return true;
        }
        catch
        {
            webReq.Abort();
            webReq = null;
            return false;
        }
    }

    private async Task<bool> CheckForConnection()
    {
        bool isConnected = await IsConnectedToInternet();
        Debug.WriteLine(isConnected);
        ConnectionProfile internetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();



        if (isConnected)
        {
            if (internetConnectionProfile != null)//Gets metereing info, Connectionprofile gives false positives when used to check for internet connectivity
            {
                Debug.WriteLine("internet available");
                GetMeteringInformation(internetConnCectionProfile);
            }
            else
            {
                connectionProfileInfo = "Roaming information not available";
                roaming = false;
               // Debug.WriteLine("no connections");
            }
            return true;

        }           
        return false;

    }

  private async Task GetMeteringInformation(ConnectionProfile connectionProfile)
    {
        ConnectionCost connectionCost = connectionProfile.GetConnectionCost();

        roaming = connectionCost.Roaming;

        connectionProfileInfo = "Over Data Limit :" + connectionCost.OverDataLimit + " | Approaching Data Limit :" +
                                connectionCost.ApproachingDataLimit;
    }