Toegang krijgen tot platformfuncties in Blazor Hybrid

Voltooid

We bouwen hybride apps met .NET, wat betekent dat we toegang hebben tot alle .NET-klassebibliotheken. Naast deze API's biedt het bouwen van Blazor Hybrid-apps met .NET MAUI niet alleen de mogelijkheid om te implementeren op meerdere platforms, maar ook toegang tot de systeemeigen API's van elk platform. Dit betekent dat als u platformmogelijkheden van iOS, Android, macOS of Windows moet integreren, dit alles in C# kunt doen. U kunt deze API's rechtstreeks openen vanuit uw Blazor-onderdelen of gedeelde .NET MAUI-klassebibliotheken maken.

Platformintegratie

Elk platform dat .NET MAUI ondersteunt, biedt unieke besturingssysteem- en platform-API's waartoe u toegang hebt vanuit C#. .NET MAUI biedt platformoverschrijdende API's voor toegang tot veel van deze platformfunctionaliteit, waaronder toegang tot sensoren, toegang tot informatie over het apparaat waarop een app wordt uitgevoerd, het controleren van de netwerkverbinding, het veilig opslaan van gegevens en het initiëren van verificatiestromen op basis van een browser.

.NET MAUI scheidt deze platformoverschrijdende API's in verschillende functionaliteitsgebieden:

  • Toepassingsmodel: App-functionaliteit, waaronder app-acties, toepassingsgegevens, het openen van de browser, het openen van URI's, het openen van kaarten, het verwerken van machtigingen en het bijhouden van versies
  • Communicatie: Toegang tot contactpersonen, e-mail, netwerken, telefoonkiezer, sms-berichten en webverificatie
  • Apparaatfuncties: informatie en toegang tot batterij, weergave-informatie, apparaatgegevens, sensoren, zaklantaarn, geocodering, geolocatie, haptische feedback en trillingen
  • Media: Inclusief mediakiezer, schermafbeeldingen, tekst-naar-spraak- en eenheidsconversieprogramma's
  • Delen: Inclusief toegang tot het Klembord en het delen van bestanden of tekst naar andere toepassingen
  • Opslag: API's voor het kiezen van bestanden, helpers, voorkeuren en beveiligde opslag

Als een toepassing moet detecteren of internettoegang beschikbaar was op het apparaat, kan deze de Connectivity-API in Microsoft.Maui.Networkinggebruiken:

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

Api's voor toegangsplatform

Met de platformspecifieke functies van .NET MAUI kunt u functionaliteit toepassen die alleen beschikbaar is op een bepaald platform. Raadpleeg voor meer informatie informatie over platformspecifieke Android-functies, iOS-platformspecifieke enWindows-platformspecifieke gegevens.

In situaties waarin .NET MAUI geen API's biedt voor toegang tot specifieke platform-API's, kunt u uw eigen code schrijven om toegang te krijgen tot de vereiste platform-API's. Raadpleeg Platformcode aanroepenvoor meer informatie.

U kunt platformcode aanroepen vanuit platformoverschrijdende code met behulp van voorwaardelijke compilatie om verschillende platforms te targeten.

In het volgende voorbeeld wordt de DeviceOrientation enumeratie getoond, die u gebruikt om de oriëntatie van uw apparaat op te geven.

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

Voor het ophalen van de apparaatstand is het schrijven van platformcode vereist. Dit kunt u doen door een methode te schrijven die gebruikmaakt van voorwaardelijke compilatie om verschillende platforms te targeten:

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

Een .NET MAUI-app-project bevat een map Platforms , waarbij elke onderliggende map een platform vertegenwoordigt waarop .NET MAUI zich kan richten. Elke doelplatformmap bevat platformspecifieke code waarmee de app op dat platform wordt gestart, plus een andere platformcode die u toevoegt. Tijdens de build bevat het buildsysteem alleen de code uit elke map bij het bouwen voor dat specifieke platform. Wanneer u bijvoorbeeld bouwt voor Android, worden de bestanden in de map Platforms>Android ingebouwd in het app-pakket, maar zijn de bestanden in de andere platformsmappen niet. Deze benadering maakt gebruik van een functie met de naam multitargeting om meerdere platforms van één project te targeten. U kunt multitargeting combineren met gedeeltelijke klassen en gedeeltelijke methoden om platformfunctionaliteit aan te roepen vanuit platformoverschrijdende code.

In de volgende oefening gebruiken we een combinatie van .NET API's en .NET MAUI API's om onze to-do lijst op te slaan en te laden.