12

我正在开发Windows Phone 8 应用程序。在这个应用程序中,我必须连接到服务器才能获取数据。

所以在连接到服务器之前,我想检查设备的互联网连接是否可用。如果互联网连接可用,那么只有我会从服务器获取数据,否则我会显示错误消息。

请告诉我如何在 Windows Phone 8 中执行此操作。

4

7 回答 7

13

NetworkInterface.GetIsNetworkAvailable()返回 NIC 的状态。

根据状态,您可以使用以下命令询问是否已建立连接:

ConnectionProfile-Windows Phone 8.1 的类别,它使用enum NetworkConnectivityLevel

  • 没有任何
  • 本地访问
  • 互联网

这段代码应该可以解决问题。

bool isConnected = NetworkInterface.GetIsNetworkAvailable();
if (isConnected)
{
    ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
    NetworkConnectivityLevel connection = InternetConnectionProfile.GetNetworkConnectivityLevel();
    if (connection == NetworkConnectivityLevel.None || connection == NetworkConnectivityLevel.LocalAccess)
    {
        isConnected = false;
    }
}
if(!isConnected)
    await new MessageDialog("No internet connection is avaliable. The full functionality of the app isn't avaliable.").ShowAsync();
于 2014-10-13T19:27:50.387 回答
7
public static bool checkNetworkConnection()
{
    var ni = NetworkInterface.NetworkInterfaceType;

    bool IsConnected = false;
    if ((ni == NetworkInterfaceType.Wireless80211)|| (ni == NetworkInterfaceType.MobileBroadbandCdma)|| (ni == NetworkInterfaceType.MobileBroadbandGsm))
        IsConnected= true;
    else if (ni == NetworkInterfaceType.None)
        IsConnected= false;
    return IsConnected;
}

调用此函数并检查互联网连接是否可用。

于 2013-12-20T07:19:09.247 回答
0

由于这个问题出现在谷歌搜索检查互联网可用性的第一个结果中,所以我也会给出 windows phone 8.1 XAML 的答案。与 8 相比,它的 API 略有不同。

//Get the Internet connection profile
string connectionProfileInfo = string.Empty;
try {
    ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();

    if (InternetConnectionProfile == null) {
        NotifyUser("Not connected to Internet\n");
    }
    else {
        connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
        NotifyUser("Internet connection profile = " +connectionProfileInfo);
    }
}
catch (Exception ex) {
    NotifyUser("Unexpected exception occurred: " + ex.ToString());
}

有关更多阅读,请转到MSDN 如何检索网络连接...

于 2015-04-12T05:25:17.517 回答
0

你可以使用NetworkInterface.GetIsNetworkAvailable()方法。如果网络连接可用,则返回 true,否则返回 false。using Microsoft.Phone.Net.NetworkInformation如果using System.Net.NetworkInformation您在 PCL 中,请不要忘记添加。

于 2014-04-08T05:30:48.920 回答
0

您可以使用NetworkInformation.GetInternetConnectionProfile获取当前正在使用的配置文件,从中您可以计算出连接级别。此处获取更多信息GetInternetConnectionProfile msdn

您可能如何使用的示例。

    private void YourMethod()
    {
         if (InternetConnection) {

           // Your code connecting to server

         }
    }

    public static bool InternetConnection()
    {
        return NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel() >= NetworkConnectivityLevel.InternetAccess;
    }
于 2015-04-14T03:32:12.387 回答
0

我就是这样做的...

class Internet
{
    static DispatcherTimer dispatcherTimer;

    public static bool Available = false;

    public static async void StartChecking()
    {
        dispatcherTimer = new DispatcherTimer();
        dispatcherTimer.Tick += new EventHandler(IsInternetAvailable1);
        dispatcherTimer.Interval = new TimeSpan(0, 0, 10); //10 Secconds or Faster
        await IsInternetAvailable(null, null);
        dispatcherTimer.Start();
    }

    private static async void IsInternetAvailable1(object sender, EventArgs e)
    {
        await IsInternetAvailable(sender, e);
    }

    private static async Task IsInternetAvailable(object sender, EventArgs ev)
    {
        string url = "https://www.google.com/";

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.ContentType = "text/plain; charset=utf-8";
        httpWebRequest.Method = "POST";

        using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
                                                                 httpWebRequest.EndGetRequestStream, null))
        {
            string json = "{ \"302000001\" }"; //Post Anything

            byte[] jsonAsBytes = Encoding.UTF8.GetBytes(json);

            await stream.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);

            WebClient hc = new WebClient();
            hc.DownloadStringCompleted += (s, e) =>
            {
                try
                {
                    if (!string.IsNullOrEmpty(e.Result))
                    {
                        Available = true;
                    }
                    else
                    {
                        Available = false;
                    }
                }
                catch (Exception ex)
                {
                    if (ex is TargetInvocationException)
                    {
                        Available = false;
                    }
                }
            };
            hc.DownloadStringAsync(new Uri(url));
        }
    }

}

由于 windows phone 8 没有检查互联网连接的方法,您需要通过发送 POST HTTP 请求来完成。您可以通过将其发送到您想要的任何网站来做到这一点。我选择了 google.com。然后,每隔 10 秒或更短时间检查一次以刷新连接状态。

于 2016-05-05T15:09:00.470 回答
0

Web 请求的响应可能会有一些延迟。因此,对于某些应用程序,此方法可能不够快。这将检查任何设备上的互联网连接。更好的方法是检查端口 80(http 流量的默认端口)是否始终在线的网站。

public static bool TcpSocketTest()
    {
        try
        {
            System.Net.Sockets.TcpClient client =
                new System.Net.Sockets.TcpClient("www.google.com", 80);
            client.Close();
            return true;
        }
        catch (System.Exception ex)
        {
            return false;
        }
    }
于 2017-03-23T07:36:15.780 回答