it-swarm.com.ru

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

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

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

Подскажите пожалуйста как это сделать в Windows Phone 8.

12
user2636874

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();
13
jAC
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;
}

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

7
Ramesh

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

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

    private void YourMethod()
    {
         if (InternetConnection) {

           // Your code connecting to server

         }
    }

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

Поскольку этот вопрос появляется в первом результате поиска 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 Как восстановить сетевое соединение ...

0
Mani

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

0
Anthony

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

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

0
hadi arab

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