Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une limite géographique définit une limite géographique circulaire autour d’un point d’intérêt. Votre application reçoit des notifications lorsque l’utilisateur entre ou quitte la limite. Les limites géographiques sont utiles pour les rappels basés sur la localisation, les alertes, les enregistrements de présence et la diffusion de contenu contextuel.
Cet article montre comment créer une limite géographique, surveiller les modifications d’état et gérer des événements de limite géographique dans une application SDK d'application Windows (WinUI 3).
Prerequisites
- Un projet WinUI 3 créé à partir du modèle Application vide, empaquetée (WinUI 3 dans Desktop).
- Fonctionnalité d’emplacement déclarée dans le manifeste du package. Consultez Obtenir l’emplacement de l’utilisateur pour obtenir des instructions.
Demander l’accès à la localisation
Appelez Geolocator.RequestAccessAsync avant de créer ou de surveiller des limites géographiques.
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;
}
Créer une limite géographique
Définissez un géorepère en spécifiant un identifiant, un centre géographique, un rayon en mètres et les transitions d’état à surveiller (entrée, sortie ou suppression).
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);
Paramètres de géorepérage
| Parameter | Description |
|---|---|
id |
Chaîne unique qui identifie la limite géographique. Utilisez cette option pour distinguer les événements des différentes limites géographiques. |
geoshape |
Géocircon qui définit la limite. Seules les limites circulaires sont prises en charge. |
monitoredStates |
Transitions à surveiller : Entered, Exited, ou Removed. Combinez avec l’opérateur |. |
singleUse |
Si true, la limite géographique se déclenche une fois et est supprimée automatiquement. |
dwellTime |
Durée pendant laquelle l’utilisateur doit rester à l’intérieur (ou à l’extérieur) du périmètre avant que l’événement ne se déclenche. Permet de filtrer les brefs franchissements. |
Surveiller les événements de limite géographique au premier plan
Abonnez-vous à l’événement GeofenceMonitor.Current.GeofenceStateChanged pour recevoir des notifications pendant l’exécution de votre application.
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
Lisez les rapports et mettez à jour l’interface utilisateur. L’événement se déclenche sur un thread en arrière-plan ; utilisez donc DispatcherQueue pour dispatcher les mises à jour de l’interface utilisateur.
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;
}
}
});
}
Surveiller les modifications de l’état de la limite géographique
Utilisez GeofenceMonitor.Current.StatusChanged pour détecter quand la surveillance de la limite géographique est désactivée, par exemple lorsque l’utilisateur désactive les services d’emplacement.
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
Lorsque vous utilisez des limites géographiques, surveillez les modifications d’autorisation via GeofenceMonitor.StatusChanged plutôt que geolocator.StatusChanged. Une valeur de GeofenceMonitorStatus de Disabled est équivalente à PositionStatus de Disabled, mais GeofenceMonitorStatus fournit davantage de contexte pour les scénarios de géorepérage.
Supprimer une limite géographique
Supprimez une limite géographique en la trouvant dans la collection GeofenceMonitor.Current.Geofences .
var geofences = GeofenceMonitor.Current.Geofences;
var target = geofences.FirstOrDefault(g => g.Id == "SeattleDowntown");
if (target != null)
{
geofences.Remove(target);
}
Bonnes pratiques
- Définissez un temps d’attente raisonnable. Une durée de vie d’au moins 10 secondes permet de filtrer la gigue GPS et empêche les faux déclencheurs aux bords limites.
- Utilisez un rayon d’au moins 50 mètres. La précision GPS varie selon l’appareil et l’environnement. Un rayon inférieur à 50 mètres peut produire des résultats peu fiables.
- Vérifiez l’accès à Internet si nécessaire. Si votre application effectue des opérations réseau lorsqu’un événement de limite géographique se déclenche (par exemple, l’envoi d’une notification à un serveur), vérifiez la connectivité avant de créer la limite géographique.
- Gérez l’état
Removed. Les limites géographiques peuvent être supprimées par le système si elles expirent ou si le système est sous pression sur les ressources. VérifiezGeofenceState.Removedet recréez la limite géographique si votre scénario l’exige. - Ne surveillez pas le premier plan et l’arrière-plan simultanément pour la même limite géographique, sauf si nécessaire. Si vous le faites, annulez l’inscription de l’écouteur de premier plan lorsque l’application est suspendue et réinscrivez-la lorsqu’elle reprend.
Articles connexes
Windows developer