Accedere alle funzionalità della piattaforma in Blazor Hybrid

Completato

Le app ibride vengono compilate con .NET, di conseguenza è possibile accedere a tutte le librerie di classi .NET. Oltre a queste API, la compilazione di app Blazor Hybrid con .NET MAUI non solo consente di eseguire la distribuzione in più piattaforme, ma anche di accedere alle API native di ogni piattaforma. Questo significa che, se è necessario integrare le funzionalità della piattaforma di iOS, Android, macOS o Windows, è possibile eseguire tutte le operazioni in C#. È possibile accedere a queste API direttamente dai componenti Blazor o creare librerie di classi .NET MAUI condivise.

Integrazione della piattaforma

Ogni piattaforma supportata da .NET MAUI offre API univoche del sistema operativo e della piattaforma a cui è possibile accedere da C#. .NET MAUI offre API multipiattaforma per accedere a gran parte di questa funzionalità della piattaforma, che include l'accesso ai sensori, l'accesso alle informazioni sul dispositivo in cui è in esecuzione un'app, il controllo della connettività di rete, l'archiviazione dei dati in modo sicuro e l'avvio dei flussi di autenticazione basati sul browser.

.NET MAUI separa queste API multipiattaforma in diverse aree di funzionalità:

  • Modello applicativo: funzionalità dell'app, incluse azioni dell'app, informazioni sull'applicazione, apertura del browser, apertura degli URI, apertura dei mapping, gestione delle autorizzazioni e rilevamento delle versioni
  • Comunicazione: accesso ai contatti, alla posta elettronica, alla rete, alla connessione telefonica, alla messaggistica SMS e all'autenticazione Web
  • Funzionalità del dispositivo: informazioni e accesso alla batteria, informazioni sul display, informazioni sul dispositivo, sensori, torcia, geocodifica, georilevazione, feedback aptico e vibrazione
  • Contenuti multimediali: sono inclusi selezione di elementi multimediali, screenshot, sintesi vocale e convertitori di unità
  • Condivisione: sono inclusi accesso agli Appunti e condivisione di file o testo con altre applicazioni
  • Archiviazione: API per la selezione di file, helper del file system, preferenze e archiviazione sicura

Se un'applicazione deve rilevare se l'accesso a Internet è disponibile nel dispositivo, può usare l'API Connectivity in Microsoft.Maui.Networking:

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

Accedere alle API della piattaforma

Le specifiche della piattaforma .NET MAUI consentono di utilizzare funzionalità specifiche disponibili solo in una piattaforma specifica. Per altre informazioni, vedere Specifiche della piattaforma Android, Specifiche della piattaforma iOS e Specifiche della piattaforma Windows.

Nei casi in cui .NET MAUI non fornisce API per l'accesso ad API della piattaforme specifiche, è possibile scrivere codice personalizzato per accedere alle API della piattaforma necessarie. Per altre informazioni, vedere Richiamare il codice della piattaforma.

È possibile richiamare il codice della piattaforma dal codice multipiattaforma usando la compilazione condizionale per gestire piattaforme diverse.

Nell'esempio seguente viene illustrata l'enumerazione DeviceOrientation, usata per specificare l'orientamento del dispositivo:

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

Per il recupero dell'orientamento del dispositivo, è necessario scrivere il codice della piattaforma. A questo scopo, è possibile scrivere un metodo che usa la compilazione condizionale per gestire piattaforme diverse:

#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 progetto di app .NET MAUI contiene una cartella Platforms, in cui ogni cartella figlio rappresenta una piattaforma in cui è possibile eseguire .NET MAUI. La cartella di ogni piattaforma di destinazione contiene codice specifico della piattaforma che avvia l'app in tale piattaforma, oltre a eventuale altro codice della piattaforma aggiunto. In fase di compilazione, il sistema di compilazione include solo il codice di ogni cartella necessario per la compilazione per la piattaforma specifica. Ad esempio, quando si compila per Android, i file nella cartella Platforms>Android vengono integrati nel pacchetto dell'app, a differenza dei file nelle altre cartelle Platforms. Questo approccio usa una funzionalità denominata multitargeting per gestire più piattaforme da un singolo progetto. È possibile combinare il multitargeting con classi parziali e metodi parziali per richiamare la funzionalità della piattaforma dal codice multipiattaforma.

Nell'esercizio successivo si userà una combinazione di API .NET e API .NET MAUI per salvare e caricare l'elenco attività.