Возможности платформы доступа в 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 для сохранения и загрузки списка дел.