Возможности платформы доступа в Blazor Hybrid
Мы создадим гибридные приложения с помощью .NET, что означает, что у нас есть доступ ко всем библиотекам классов .NET. Помимо этих API, создание гибридных приложений Blazor с помощью .NET MAUI позволяет развертывать не только на нескольких платформах, но и обеспечивает доступ к собственным API каждой платформы. Это означает, что если необходимо интегрировать возможности платформы iOS, Android, macOS или Windows, все это можно сделать в C#. Эти API можно получить непосредственно из компонентов Blazor или создать общие библиотеки классов MAUI .NET.
Интеграция платформы
Каждая платформа, которая поддерживает .NET MAUI, предлагает уникальные API операционной системы и платформы, к которым можно получить доступ из C#. .NET MAUI предоставляет кроссплатформенные API для доступа к большей части этой платформы, которая включает доступ к датчикам, доступ к информации об устройстве, на котором работает приложение, проверка сетевого подключения, безопасное хранение данных и запуск потоков проверки подлинности на основе браузера.
.NET MAUI разделяет эти кроссплатформенные API в различные области функциональности:
- Модель приложения: функции приложений, включая действия приложения, сведения о приложении, открытие браузера, открытие URI, открытие карт, обработка разрешений и отслеживание версий
- связи: доступ к контактам, электронной почте, сети, телефонной связи, обмену сообщениями и веб-проверке подлинности
- Функции устройства: информация и доступ к батарее, отображение сведений, сведения об устройстве, датчики, фонарик, геокодирование, геолокация, хаптиковая обратная связь и вибрация
- медиа: включая средство выбора медиа, снимки экрана, текст в речь и преобразователи единиц
- Обмен: включая доступ к буферу обмена и обмен файлами или текстом в другие приложения
- хранилища: API для выбора и взаимодействия с файлами, помощники файловой системы, настройки и безопасное хранилище
Если приложению требуется определить, был ли доступ к Интернету доступен на устройстве, он может использовать API Connectivity
в Microsoft.Maui.Networking
:
var accessType = Connectivity.Current.NetworkAccess;
if (accessType is NetworkAccess.Internet)
{
// Connection to internet is available
}
Доступ к API платформы
Платформенные спецификации .NET MAUI позволяют использовать специфические функциональности, доступные только на определенной платформе. Дополнительные сведения см. в для платформы Android, платформы iOS и для платформы Windows.
В ситуациях, когда .NET MAUI не предоставляет api для доступа к определенным API платформы, можно написать собственный код для доступа к необходимым API платформы. Дополнительные сведения см. в коде платформы Invoke, обозначенном как и.
Платформенный код можно вызвать из кроссплатформенного кода, используя условную компиляцию для работы с разными платформами.
В следующем примере показано перечисление DeviceOrientation
, которое используется для указания ориентации устройства:
namespace InvokePlatformCodeDemos.Services
{
public enum DeviceOrientation
{
Undefined,
Landscape,
Portrait
}
}
Для получения ориентации устройства требуется написание кода платформы, который можно выполнить путем написания метода, использующего условную компиляцию для целевых платформ:
#if ANDROID
using Android.Content;
using Android.Views;
using Android.Runtime;
#elif IOS
using UIKit;
#endif
using InvokePlatformCodeDemos.Services;
namespace InvokePlatformCodeDemos.Services.ConditionalCompilation
{
public class DeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
#if ANDROID
IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
bool isLandscape = orientation == SurfaceOrientation.Rotation90 || orientation == SurfaceOrientation.Rotation270;
return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
#elif IOS
UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
bool isPortrait = orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown;
return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
#else
return DeviceOrientation.Undefined;
#endif
}
}
}
Проект приложения .NET MAUI содержит папку "Платформы" с каждой дочерней папкой, представляющей платформу, предназначенную для .NET MAUI. Каждая папка целевой платформы содержит код для конкретной платформы, который запускает приложение на этой платформе, а также любой другой добавленный код платформы. Во время сборки система сборки включает только код из каждой папки для этой конкретной платформы. Например, при сборке для Android файлы в папке Платформы>Android встраиваются в пакет приложения, но файлы в других папках Платформ не встраиваются. Этот подход использует функцию, называемую multitargeting, для целевой работы с несколькими платформами из одного проекта. Вы можете объединить многотаргетинг с частичными классами и частичными методами, чтобы вызывать функциональность платформы из кроссплатформенного кода.
В следующем упражнении мы будем использовать сочетание API .NET и API .NET MAUI для сохранения и загрузки списка дел.