Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Geofence definiert eine kreisförmige geografische Grenze um einen interessanten Punkt. Ihre App empfängt Benachrichtigungen, wenn der Benutzer die Grenze eingibt oder verlässt. Geofences sind nützlich für standortbasierte Erinnerungen, Warnungen, Check-Ins und kontextbezogene Inhaltsübermittlung.
In diesem Artikel wird erläutert, wie Sie geofence-Ereignisse erstellen, Zustandsänderungen überwachen und Geofence-Ereignisse in einer Windows App SDK -App (WinUI 3) behandeln.
Voraussetzungen
- Ein WinUI 3-Projekt, das aus der Vorlage "Leere App, Verpackt" (WinUI 3 in Desktop) erstellt wurde.
- Die im Paketmanifest deklarierte Standort-Funktion. Anweisungen finden Sie unter Den Standort des Benutzers abrufen.
Anfordern des Standortzugriffs
Rufen Sie Geolocator.RequestAccessAsync auf, bevor Sie Geofences erstellen oder überwachen.
using Windows.Devices.Geolocation;
using Windows.Devices.Geolocation.Geofencing;
var accessStatus = await Geolocator.RequestAccessAsync();
if (accessStatus != GeolocationAccessStatus.Allowed)
{
StatusText.Text = "Location access is required for geofencing.";
return;
}
Geofence erstellen
Definieren Sie einen Geofence-Bereich, indem Sie einen Bezeichner, ein geografisches Zentrum, einen Radius in Metern angeben und welche Zustandsübergänge überwacht werden (eingegeben, beendet oder entfernt).
var position = new BasicGeoposition
{
Latitude = 47.6062,
Longitude = -122.3321
};
var geocircle = new Geocircle(position, 200); // 200-meter radius
var geofence = new Geofence(
"SeattleDowntown", // Unique identifier
geocircle, // Geographic boundary
MonitoredGeofenceStates.Entered | // States to monitor
MonitoredGeofenceStates.Exited,
false, // Single use: false = persistent
TimeSpan.FromSeconds(10) // Dwell time before triggering
);
GeofenceMonitor.Current.Geofences.Add(geofence);
Geofence-Parameter
| Parameter | Description |
|---|---|
id |
Eine eindeutige Zeichenfolge, die den Geofence-Bereich identifiziert. Verwenden Sie dies, um Ereignisse von verschiedenen Geofences zu unterscheiden. |
geoshape |
Ein Geokreis , der die Grenze definiert. Es werden nur Kreisgrenzen unterstützt. |
monitoredStates |
Welche Übergänge überwacht werden sollen: Entered, , Exitedoder Removed. Mit dem | Operator kombinieren. |
singleUse |
Wenn true, wird der Geofence einmal ausgelöst und automatisch entfernt. |
dwellTime |
Wie lange der Benutzer innerhalb (oder außerhalb) der Grenze bleiben muss, bevor das Ereignis ausgelöst wird. Hilft, kurze Übergänge herauszufiltern. |
Geofence-Ereignisse im Vordergrund überwachen
Abonnieren Sie das GeofenceMonitor.Current.GeofenceStateChanged-Ereignis , um Benachrichtigungen zu empfangen, während Ihre App ausgeführt wird.
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
Lesen Sie die Berichte, und aktualisieren Sie die Benutzeroberfläche. Das Ereignis wird in einem Hintergrundthread ausgelöst. Verwenden Sie daher DispatcherQueue zum Marshallen von UI-Updates.
private void OnGeofenceStateChanged(GeofenceMonitor sender, object args)
{
var reports = sender.ReadReports();
DispatcherQueue.TryEnqueue(() =>
{
foreach (var report in reports)
{
var state = report.NewState;
var id = report.Geofence.Id;
switch (state)
{
case GeofenceState.Entered:
StatusText.Text = $"Entered geofence: {id}";
break;
case GeofenceState.Exited:
StatusText.Text = $"Exited geofence: {id}";
break;
case GeofenceState.Removed:
StatusText.Text = $"Geofence removed: {id}";
// Re-add the geofence if it was removed due to expiration
break;
}
}
});
}
Überwachen von Geofence-Statusänderungen
Verwenden Sie GeofenceMonitor.Current.StatusChanged , um zu erkennen, wann die Geofence-Überwachung deaktiviert ist , z. B. wenn der Benutzer Standortdienste deaktiviert.
GeofenceMonitor.Current.StatusChanged += (sender, args) =>
{
DispatcherQueue.TryEnqueue(() =>
{
var status = sender.Status;
if (status == GeofenceMonitorStatus.Disabled)
{
StatusText.Text = "Geofence monitoring is disabled. Check location settings.";
}
});
};
Tip
Überwachen Sie bei Verwendung von Geofences Berechtigungsänderungen über GeofenceMonitor.StatusChanged anstelle von Geolocator.StatusChanged. Ein GeofenceMonitorStatus-WertDisabled entspricht einem PositionStatus von Disabled, bietet jedoch GeofenceMonitorStatus mehr Kontext für Geofencing-Szenarien.
Geofence entfernen
Entfernen Sie einen Geofence, indem Sie ihn in der Auflistung GeofenceMonitor.Current.Geofences suchen.
var geofences = GeofenceMonitor.Current.Geofences;
var target = geofences.FirstOrDefault(g => g.Id == "SeattleDowntown");
if (target != null)
{
geofences.Remove(target);
}
Bewährte Methoden
- Legen Sie eine angemessene Verweilzeit fest. Eine Verweilzeit von mindestens 10 Sekunden hilft, GPS-Jitter herauszufiltern und falsche Auslöser an Grenzgrenzen zu verhindern.
- Verwenden Sie einen Radius von mindestens 50 Metern. Die GPS-Genauigkeit variiert je nach Gerät und Umgebung. Ein Radius kleiner als 50 Meter kann zu unzuverlässigen Ergebnissen führen.
- Überprüfen Sie bei Bedarf den Internetzugriff. Wenn Ihre App Netzwerkvorgänge ausführt, wenn ein Geofence-Ereignis eintritt (etwa um eine Benachrichtigung an einen Server zu senden), überprüfen Sie die Netzwerkverbindung, bevor Sie den Geofence einrichten.
- Behandeln Sie den Zustand
Removed. Geofences können vom System entfernt werden, wenn sie ablaufen oder wenn das System unter Ressourcendruck steht. Prüfen SieGeofenceState.Removedund erstellen Sie den Geofence neu, falls Ihr Szenario dies erfordert. - Überwachen Sie den Vordergrund und den Hintergrund nicht gleichzeitig auf denselben Geofence-Raum, es sei denn, dies ist erforderlich. Wenn Sie dies tun, melden Sie den Foreground-Listener ab, wenn die App angehalten wird, und registrieren Sie ihn erneut, wenn sie wieder aktiv wird.
Verwandte Artikel
Windows developer