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
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Utilizzare un service principal per accedere a Azure Container Registry
Implementare l'infinite scroll con QuickGrid in Blazor Server
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Utilizzare i primary constructor di C# per inizializzare le proprietà
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Utilizzare Copilot con Azure Cosmos DB
Gestione degli stili CSS con le regole @layer
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento