Взаимодействие с сервером

Подключение к сети

Последнее обновление: 14.01.2021

Взаимодействие с сервером является одним из неотъемлемых возможностей многих мобильных приложений. Приложение может получать данные с сервера, или, наоборот, отправлять некоторые данные. Но чтобы взаимодействовать с сервером, необходимо подключение к сети, которое не не всегда может быть доступно в силу тех или иных причин. С помощью специального класса Connectivity из пакета Xamarin.Essentials, который добавляется в проект Xamarin Forms по умолчанию, мы можем проверить подключение к интернету.

Платформы имеют ряд ограничений при работе с сетью, которые нам надо учитывать. В частности, для получения состояния сети в Android, надо задать соответствующие разрешения. Для этого перейдем в проекте для Android к папке Properties, откроем файл AssemblyInfo.cs и добавим в него следующую строку:

[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

Либо также в проекте для Android и также в папке Properties мы можем добавить в файл AndroidManifest.xml в узел manifest строку:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Для проектов для iOS и UWP никаких изменений не требуется.

Какой функционал предоставляет класс Connectivity? Прежде всего с помощью свойства Connectivity.NetworkAccess он позволяет проверить наличие доступа к сети. Это свойство представляет перечисление NetworkAccess, которое определяет следующие значения:

  • Internet: есть подключение к интернету

  • ConstrainedInternet: есть ограниченный доступ, для которого требуются учетные данные

  • Local: имеется доступ только к локальной сети

  • None: доступ к сети отсутствует

  • Unknown: невозможно определить состояние подключения

Таким образом, с помощью данного перечисления мы можем проверить состояние подключения:

var current = Connectivity.NetworkAccess;

if (current == NetworkAccess.Internet)
{
    // некоторые действия 
}

Кроме того, класс Connectivity определяет свойство Connectivity.ConnectionProfiles, которое содержит набор доступых профилей для доступа к сети. Каждый профиль представлен перечислением ConnectionProfile, которое определяет следующие значения:

  • Bluetooth: есть доступ через Bluetooth

  • Cellular: подключение через мобильную связь

  • Ethernet: подключение через кабель Ethernet

  • WiFi: подключение через WiFi

  • Unknown: неизвестный тип подключения

Проверка типа подключения:

var profiles = Connectivity.ConnectionProfiles;
if (profiles.Contains(ConnectionProfile.WiFi))
{
    // если активно подключение через Wi-Fi
}

Кроме того, класс определяет событие Connectivity.ConnectivityChanged, которое генерируется при изменения состояния подключения.

Используем функционал класса Connectivity. Для этого в классе MainPage определим следующий код:

using System;
using Xamarin.Forms;
using Xamarin.Essentials;
using System.Linq;

namespace HelloApp
{
    public partial class MainPage : ContentPage
    {
        Label connectionStateLbl;
        public MainPage()
        {
            connectionStateLbl = new Label
            {
                FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.Center,
            };
            Content = new StackLayout
            {
                Children = { connectionStateLbl}
            };

            Connectivity.ConnectivityChanged += Current_ConnectivityChanged;
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            CheckConnection();
        }
        // обработка изменения состояния подключения
        private void Current_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
        {
            CheckConnection();
        }
        // получаем состояние подключения
        private void CheckConnection()
        {
            if(Connectivity.NetworkAccess == NetworkAccess.Internet)
            {
                connectionStateLbl.Text = "Доступные типы подключений:\n";
                var profiles = Connectivity.ConnectionProfiles;
                foreach (var profile in profiles)
                {
                    connectionStateLbl.Text += $"{profile.ToString()} \n";
                }
            }
            else
            {
                connectionStateLbl.Text = "Подключение отсутствует";
            }
        }
    }
}

На странице определена метка, которая будет выводить информацию о подключении. Если полноценного подключения к интернету нет, выводим одно сообщение:

Подключение к интернету в Xamarin Forms

При наличии доступа к сети будут отображаться все доступные типы подключения:

Управление подключением к интернету в Xamarin Forms
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850