Acceso a las características de la plataforma en Blazor Hybrid

Completado

Estamos creando aplicaciones híbridas con .NET, lo que significa que tenemos acceso a todas las bibliotecas de clases de .NET. Además de estas API, la creación de aplicaciones híbridas de Blazor con .NET MAUI no solo le permite implementar en varias plataformas, sino que también permite el acceso a las API nativas de cada plataforma. Esto significa que si necesita integrar funcionalidades de plataforma de iOS, Android, macOS o Windows, puede hacerlo todo en C#. Puede acceder a estas API directamente desde los componentes de Blazor o crear bibliotecas de clases .NET MAUI compartidas.

Integración de la plataforma

Cada plataforma que .NET MAUI admite ofrece un sistema operativo y API de plataforma únicos a las que puede acceder desde C#. .NET MAUI proporciona API multiplataforma para acceder a gran parte de esta funcionalidad de plataforma, que incluye el acceso a sensores, el acceso a información sobre el dispositivo en el que se ejecuta una aplicación, la comprobación de la conectividad de red, el almacenamiento de datos de forma segura y el inicio de flujos de autenticación basados en explorador.

.NET MAUI separa estas API multiplataforma en diferentes áreas de funcionalidad:

  • Modelo de aplicación: funcionalidad de la aplicación, incluidas las acciones de la aplicación, la información de la aplicación, la apertura del explorador, los URI de apertura, la apertura de mapas, el control de permisos y el seguimiento de versiones
  • Comunicación: acceso a contactos, correo electrónico, redes, marcador telefónico, mensajería sms y autenticación web
  • Características del dispositivo: información y acceso a la batería, información de pantalla, información del dispositivo, sensores, linterna, geocodificación, geolocalización, comentarios hápticos y vibración
  • Medios: incluidos el selector de medios, capturas de pantalla, convertidores de texto a voz y unidades
  • Uso compartido: incluido el acceso al Portapapeles y el uso compartido de archivos o texto a otras aplicaciones
  • Almacenamiento: API para seleccionar archivos, asistentes del sistema de archivos, preferencias y almacenamiento seguro

Si una aplicación necesitaba detectar si el acceso a Internet estaba disponible en el dispositivo, podría usar la Connectivity API en Microsoft.Maui.Networking:

var accessType = Connectivity.Current.NetworkAccess;
if (accessType is NetworkAccess.Internet)
{
    // Connection to internet is available
}

Acceso a las API de plataforma

Las características específicas de la plataforma MAUI de .NET permiten utilizar funcionalidades que solo están disponibles en una plataforma determinada. Para obtener más información, consulte los detalles de la plataforma Android, los específicos de la plataforma iOS y los específicos de la plataforma Windows.

En situaciones en las que .NET MAUI no proporciona ninguna API para acceder a api de plataforma específicas, puede escribir su propio código para acceder a las API de plataforma necesarias. Para obtener más información, consulte Invoke platform code (Invocar código de plataforma).

Puede invocar código de plataforma desde código multiplataforma mediante la compilación condicional para dirigirse a distintas plataformas.

En el ejemplo siguiente se muestra la DeviceOrientation enumeración , que se usa para especificar la orientación del dispositivo:

namespace InvokePlatformCodeDemos.Services
{
    public enum DeviceOrientation
    {
        Undefined,
        Landscape,
        Portrait
    }
}

La recuperación de la orientación del dispositivo requiere escribir código de plataforma, lo que puede lograr escribiendo un método que usa la compilación condicional para tener como destino diferentes plataformas:

#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
        }
    }
}

Un proyecto de aplicación MAUI de .NET contiene una carpeta Platforms , con cada carpeta secundaria que representa una plataforma que .NET MAUI puede tener como destino. Cada carpeta de plataforma de destino contiene código específico de la plataforma que inicia la aplicación en esa plataforma, además de cualquier otro código de plataforma que agregue. En tiempo de compilación, el sistema de compilación solo incluye el código de cada carpeta al compilar para esa plataforma específica. Por ejemplo, al compilar para Android, los archivos de la carpeta Plataformas>Android están integrados en el paquete de la aplicación, pero los archivos de las otras carpetas Plataformas no. Este enfoque usa una característica denominada multitargeting para tener como destino varias plataformas desde un solo proyecto. Puede combinar varios destinos con clases parciales y métodos parciales para invocar la funcionalidad de la plataforma desde código multiplataforma.

En el ejercicio siguiente, usaremos una combinación de API de .NET y API de .NET MAUI para guardar y cargar nuestra lista de tareas pendientes.