Как проверить доступность интернет-соединения в приложении Windows Phone 8

Я разрабатываю приложение для Windows Phone 8. В этом приложении мне нужно подключиться к серверу, чтобы получить данные.

Итак, перед подключением к серверу я хочу проверить, доступно ли подключение к Интернету или нет. Если интернет-соединение доступно, тогда я получу данные с сервера. В противном случае я покажу сообщение об ошибке.

Расскажите, как это сделать в Windows Phone 8.

Ответ 1

NetworkInterface.GetIsNetworkAvailable() возвращает статус сетевых адаптеров.

В зависимости от состояния вы можете спросить, установлено ли подключение, используя:

ConnectionProfile -Класс Windows Phone 8.1, который использует enum NetworkConnectivityLevel:

  • None
  • Локальный доступ
  • Доступ в Интернет

Этот код должен сделать трюк.

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();

Ответ 2

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;
}

Вызовите эту функцию и проверьте, доступно ли подключение к Интернету.

Ответ 3

Вы можете использовать метод NetworkInterface.GetIsNetworkAvailable(). Он возвращает true, если сетевое соединение доступно и false, если нет. И не забудьте добавить using Microsoft.Phone.Net.NetworkInformation или using System.Net.NetworkInformation, если вы находитесь в PCL.

Ответ 4

Так как этот вопрос появляется в первом результате поиска google для проверки доступности Интернета, я бы поставил ответ на Windows Phone 8.1 XAML. Он имеет несколько разных API по сравнению с 8.

//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 Как получить сетевое подключение...

Ответ 5

Вы можете использовать NetworkInformation.GetInternetConnectionProfile для получения профиля, который в настоящее время используется, из этого вы можете определить уровень подключения. Подробнее здесь GetInternetConnectionProfile msdn

Пример того, как вы можете использовать.

    private void YourMethod()
    {
         if (InternetConnection) {

           // Your code connecting to server

         }
    }

    public static bool InternetConnection()
    {
        return NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel() >= NetworkConnectivityLevel.InternetAccess;
    }

Ответ 6

Вот как я это сделал...

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 8 не имеет возможности проверить подключение к Интернету, вам нужно сделать это, отправив запрос POST HTTP. Вы можете сделать это, отправив его на любой веб-сайт, который вы хотите. Я выбрал google.com. Затем проверьте каждые 10 секунд или менее, чтобы обновить состояние соединения.

Ответ 7

Может возникнуть некоторая задержка в ответе веб-запроса. Поэтому для некоторых приложений этот метод может быть недостаточно быстрым. Это проверит подключение к Интернету на любом устройстве. Лучше всего проверить, действительно ли порт 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;
        }
    }