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
Raggruppare risorse in .NET Aspire
Il nuovo persistent state in Blazor
Applicare il progressive enhancement in applicazioni web
Self-healing degli unit test con Copilot in GitHub
Eseguire una ExecuteUpdateAsync senza usare un'expression con Entity Framework
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Creare una file based app con C#
Operazioni tra insiemi di array in Javascript
Configurare OpenAI in .NET Aspire
Utilizzare Containers in .NET Aspire
Cache temporanea in Javascript con oggetti
Supporto semplificato per le left join in Entity Framework 10
I più letti di oggi
- Leggere i parametri da riga di comando in una file based app .NET
- Building Custom Developer Agents
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- Build 2016: segui con noi in live streaming!


