Windows phone7: 检查互联网连接是否可用

3

在Windows Phone7中,我只需要在继续下一组操作之前检查是否有可用的互联网连接。我搜索并找到了许多帖子中建议的三个选项,它们如下:

(a). bool isNetworkAvailable = NetworkInterface.GetIsNetworkAvailable();
(b). bool isNetworkAvailable = DeviceNetworkInformation.IsNetworkAvailable;
(c). bool isNetworkAvailable = (NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None);

在(a)和(b)选项中,即使WIFI关闭且无可用的互联网连接,它也会提供TRUE作为结果。但是,当没有互联网连接时,(c)提供准确(真实)的结果。但这需要很长时间才能响应。在此之前,应用程序会陷入困境...
我使用真实设备(不仅是模拟器)检查了所有这些,并正在努力确定检查设备互联网可用性的最佳方法。
非常感谢任何建议... 提前致谢...

1
请记住,网络可用性并不等同于互联网连接。您可能需要ping IP地址或发送HTTP请求到某个地方。 - LukeP
4个回答

1

知道网络可用并连接到更广泛的互联网之间存在差异。NetworkInterface.GetIsNetworkAvailable()非常快速,如果网络接口被禁用,则返回false。

如果它返回网络可用,它只是表示您可以连接 - 仍然可能存在DNS查找速度、通过蜂窝网络连接(如果没有WiFi连接)以及设备尚未连接等潜在问题。

如果网络访问导致性能问题,您应该考虑将其移出UI线程。


1

我们可以使用这个。我在我的项目中有相同的概念,并且已经完成了以下工作。希望能有所帮助。

  public bool netWorkAvailable()
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            Logger.log(TAG, "netWorkAvailable()");
            return true;
        }
        return false;
    }

 if (netWorkAvailable())
   {
     buffer.Append(SERVER_URL);
     buffer.Append("_req=").Append(8);
     httpConnection = new HttpConnection();
     httpConnection.connect(REQ_REGISTRATION, buffer.ToString(), listener, null);
     httpConnection.Post();
    }

我有不同的类来处理所有的http连接。 除此之外,为了我的项目目的,我还检查了一些其他事情,它们如下:

public bool IsWifiAvailable()
    {
     if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211))
         {
          return true;
         }
     else
       {
        return false;
       }
    }

    public bool threeGkAvailable()
    {
        if ((NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandCdma)
                  || (NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.MobileBroadbandGsm))
        {
            return true;
        }
        else
        {
            return false;

        }
    }

这仍然不能告诉您所连接的网络是否连接到互联网。考虑这样一种情况,您在家中,移动覆盖范围很差,ADSL也无法使用。我仍然连接到WiFi,但无法连接到互联网... - Rowland Shaw

0

您可以使用WebClient请求一个网页来检查用户是否连接到互联网。

WebClient client = new WebClient();
        client.DownloadStringCompleted += (s, e) =>
        {
            if (e.Error == null && !e.Cancelled)
            {
                //completed.TrySetResult(true);
                MessageBox.Show("Internet Connected", "True", MessageBoxButton.OK);
            }
            else
            {
                //completed.TrySetResult(false);
                MessageBox.Show("Internet Not Connected", "False", MessageBoxButton.OK);
            }
        };
        client.DownloadStringAsync(new Uri("http://www.google.com/"));

此外,您可以设置一个20秒的超时时间,以防出现异常情况。


0

或许你可以尝试向已知的网页发送一个HttpWebRequest,并检查响应中前几个字符是否与预期结果匹配。你可能还想循环执行此检查函数几次,直到连通性测试实际获得结果(无论是成功还是失败)。

将其加载到与UI线程分离的线程上,并进行尝试。一定要捕获任何异常(如果由于缺乏连接或其他问题而导致测试失败)。我曾在我的Windows Phone 7应用程序中使用过这个方法,但我不确定它是否是最好的想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接