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
Definire stili a livello di libreria in Angular
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Generare file per il download da Blazor WebAssembly
Creare gruppi di client per Event Grid MQTT
Sfruttare al massimo i topic space di Event Grid MQTT
Specificare il versioning nel path degli URL in ASP.NET Web API
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Eseguire operazioni con timeout in React
Verificare la provenienza di un commit tramite le GitHub Actions
Evitare la command injection in un workflow di GitHub
Creazione di componenti personalizzati in React.js con Tailwind CSS
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2