Nello script #100 abbiamo visto come monitorare quando un dispositivo entra ed esce da determinate aree, attraverso le API di Geofence, quando l'app è in esecuzione.
Questo controllo può essere eseguito anche quando un'app non è in esecuzione grazie a un IBackgroundTask e a LocationTrigger, di tipo appunto Geofence.
All'interno della classe che implementa IBackgroundTask possiamo interrogare lo stato di GeofenceMonitor e lanciare, ad esempio, una notifica toast in caso ci sia un report con stato GeofenceState.Entered.
public sealed class GeofenceNotificationTask : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { var reports = GeofenceMonitor.Current.ReadReports(); var report = reports.FirstOrDefault(r => r.NewState == GeofenceState.Entered); if (report == null) return; var toastXmlContent = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); var txtNodes = toastXmlContent.GetElementsByTagName("text"); txtNodes[0].InnerText = "Geofence entered"; txtNodes[1].InnerText = report.Geofence.Id; var toast = new ToastNotification(toastXmlContent); var toastNotifier = ToastNotificationManager.CreateToastNotifier(); toastNotifier.Show(toast); } }
La registrazione del Background Task può essere eseguita dall'app vera e propria attraverso BackgroundTaskBuilder, impostando come trigger un oggetto LocationTrigger e specificando come TaskEntryPoint il fullname del nostro IBackgroundTask.
try { var result = await BackgroundExecutionManager.RequestAccessAsync(); bool isRegistered = BackgroundTaskRegistration.AllTasks.Any(x => x.Value.Name == "GeofenceNotificationTask"); if (!isRegistered) { var builder = new BackgroundTaskBuilder(); builder.Name = "GeofenceNotificationTask"; builder.TaskEntryPoint = typeof(WindowsRuntimeComponent1.GeofenceNotificationTask).FullName; builder.SetTrigger(new LocationTrigger(LocationTriggerType.Geofence)); builder.Register(); } } catch (Exception ex) { }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Semplificare il deployment di siti statici con Azure Static Web App
Utilizzare flat e flatMap per appiattire array innestati in array
Potenziare Azure AI Search con la ricerca vettoriale
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Utilizzare Tailwind CSS all'interno di React: installazione
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Eseguire operazioni con timeout in React
Configurare policy CORS in Azure Container Apps
Creare moduli CSS in React
Eseguire le GitHub Actions offline
Modificare i metadati nell'head dell'HTML di una Blazor Web App