Xamarin.Essentials:Связь
Класс Connectivity позволяет отслеживать изменения в условиях подключения устройства к сети, проверять текущее состояние и используемый метод доступа.
Начало работы
Чтобы начать использовать этот API, ознакомьтесь с руководством по началу работы с Xamarin.Essentials, чтобы правильно настроить и установить библиотеку в проектах.
Чтобы проверить функциональность класса Connectivity, нужно создать описанную ниже конфигурацию для конкретной платформы.
Требуется разрешение AccessNetworkState
, которое следует настроить в проекте Android. Для этого можно применить любой из следующих методов:
Откройте файл AssemblyInfo.cs в папке Свойства и добавьте в него:
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
ИЛИ обновите манифест Android:
Откройте файл AndroidManifest.xml в папке Properties и добавьте приведенный ниже код в узел manifest.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
ИЛИ щелкните правой кнопкой мыши проект Android и откройте свойства проекта. В разделе Манифест Android найдите область Требуемые разрешения: и установите флажок для разрешения Access Network State (Доступ к состоянию сети). Это действие автоматически обновляет файл AndroidManifest.xml.
Использование подключения
Добавьте ссылку на Xamarin.Essentials в своем классе:
using Xamarin.Essentials;
Проверьте текущий сетевой доступ:
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
// Connection to internet is available
}
Сетевой доступ разделяется на следующие категории:
- Internet — локальная сеть и доступ к Интернет;у
- ConstrainedInternet — ограниченный доступ к Интернету. Обозначает режим условного доступа через портал, при котором предоставляется локальный доступ к веб-порталу, а доступ к Интернету осуществляется через этот портал со специальными учетными данными;
- Local — только доступ к локальной сети;
- None — подключение недоступно;
- Unknown — не удается определить режим подключения.
Вы можете проверить, какой тип профиля подключения устройство активно использует:
var profiles = Connectivity.ConnectionProfiles;
if (profiles.Contains(ConnectionProfile.WiFi))
{
// Active Wi-Fi connection.
}
Вы можете получать события с информацией о любых изменениях профиля подключения и (или) режима сетевого доступа:
public class ConnectivityTest
{
public ConnectivityTest()
{
// Register for connectivity changes, be sure to unsubscribe when finished
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
}
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
var access = e.NetworkAccess;
var profiles = e.ConnectionProfiles;
}
}
Ограничения
Обратите внимание, что при состоянии Internet
, полученном от NetworkAccess
, доступ к Интернету может быть не полным. Так как на разных платформах используются различные методы подключения, можно гарантировать только факт наличия подключения. Например, устройство может быть подключено к сети Wi-Fi, маршрутизатор которой не имеет подключения к Интернету. В этом случае будет зарегистрировано подключение к Интернету, но не будет возможности его активно использовать.