Configurer une clôture virtuelle (HTML)
[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]
Cette rubrique vous guide tout au long des étapes nécessaires à la configuration d’un élément Geofence dans votre application.
Feuille de route : comment cette rubrique s’articule-t-elle par rapport aux autres ? Voir :
Introduction
Plusieurs étapes sont à respecter pour configurer votre composant Geofence. Outre la définition de la région d’intérêt, vous devez également vous assurer que vous bénéficiez des autorisations d’emplacement appropriées. Enfin, vous devez configurer un gestionnaire d’événements au cas où l’utilisateur modifie ces autorisations pendant que votre application est en cours d’exécution.
Vérifier que la localisation est activée
Pour que votre application puisse accéder à la fonction de localisation, l’option Emplacement doit être activée sur l’appareil. Dans l’application Paramètres, vérifiez que les paramètres de confidentialité relatifs à la géolocalisation suivants sont bien activés :
- Le paramètre Emplacement de cet appareil... est activé (non applicable dans Windows 10 Mobile).
- Le paramètre des services de localisation Emplacement est activé.
- Sous Choisir les applications qui peuvent utiliser votre emplacement, votre application est définie sur Activé.
Activer la fonctionnalité de localisation
Double-cliquez sur package.appxmanifest dans l’ Explorateur de solutions, puis sélectionnez l’onglet Capacités. Ensuite, sélectionnez Emplacement dans la liste Capacités. Cette opération ajoute la fonctionnalité Location
de l’appareil au fichier manifeste du package.
<Capabilities>
<!-- DeviceCapability elements must follow Capability elements (if present) -->
<DeviceCapability Name="location"/>
</Capabilities>
Vérifier les autorisations d’emplacement
Vous pouvez d’abord ajouter du code à votre application pendant l’initialisation pour obtenir l’emplacement. Sur Windows, le système demande à l’utilisateur l’autorisation d’emplacement la première fois que votre application utilise l’API pour obtenir l’emplacement actuel. Si votre application n’a pas l’autorisation de l’utilisateur, avertissez l’utilisateur. Notez qu’il est toujours possible de configurer un composant Geofence sans autorisations d’emplacement, mais impossible de recevoir des notifications tant que les autorisations ne sont pas activées.
function initialize() {
promise = geolocator.getGeopositionAsync();
promise.done(
function (pos) {
var coord = pos.coordinate;
},
function (err) {
// handle situations where location permissions are not granted to your app
}
);
}
Détecter des changements d’autorisation d’emplacement
Ensuite, vous devez veiller à vous inscrire pour les événements de changement d’autorisation au cas où l’utilisateur décide de désactiver les autorisations d’emplacement pour une raison quelconque. Ajoutez d’abord les gestionnaires d’événements à votre méthode d’initialisation :
var accessInfo = null;
accessInfo = DeviceAccessInformation.createFromDeviceClass(Enumeration.DeviceClass.location);
accessInfo.addEventListener("accesschanged", onAccessChanged);
Gérez ensuite les changements apportés aux autorisations pour informer l’utilisateur que le géorepérage ne fonctionnera plus si les autorisations sont désactivées :
function onAccessChanged(args) {
var eventDescription = getTimeStampedMessage("Device Access Status");
var item = null;
if (DeviceAccessStatus.deniedByUser === args.status) {
eventDescription += " (DeniedByUser)";
WinJS.log && WinJS.log("Location has been disabled by the user. Enable access through the settings charm.", "sample", "status");
} else if (DeviceAccessStatus.deniedBySystem === args.status) {
eventDescription += " (DeniedBySystem)";
WinJS.log && WinJS.log("Location has been disabled by the system. The administrator of the device must enable location access through the location control panel.", "sample", "status");
} else if (DeviceAccessStatus.unspecified === args.status) {
eventDescription += " (Unspecified)";
WinJS.log && WinJS.log("Location has been disabled by unspecified source. The administrator of the device may need to enable location access through the location control panel, then enable access through the settings charm.", "sample", "status");
} else if (DeviceAccessStatus.allowed === args.status) {
eventDescription += " (Allowed)";
// clear status
WinJS.log && WinJS.log("", "sample", "status");
} else {
eventDescription += " (Unknown)";
WinJS.log && WinJS.log("Unknown device access information status", "sample", "status");
}
addEventDescription(eventDescription);
}
Remarque Vous pouvez déterminer si l’utilisateur a désactivé la localisation dans Paramètres en vérifiant la propriété LocationStatus. Si la valeur est Disabled, cela signifie que la localisation est désactivée.
Créer la clôture virtuelle
Vous êtes maintenant prêt à définir et configurer une clôture virtuelle. Les valeurs qu’il est possible de définir pour une clôture virtuelle sont notamment les suivantes :
- Une propriété Id permettant de l’identifier.
- La région d’intérêt circulaire définie par la propriété Geoshape.
- La propriété MonitoredStates qui indique les événements de géorepérage pour lesquels vous souhaitez recevoir des notifications au moment d’entrer ou de quitter la région définie ou bien de supprimer la clôture virtuelle.
- Un indicateur SingleUse chargé de supprimer la clôture virtuelle après que les états qu’elle surveille ont été respectés.
- Une propriété DwellTime qui indique le temps pendant lequel l’utilisateur doit rester à l’intérieur ou en dehors de la zone définie avant le déclenchement des événements d’entrée/sortie (Enter/Exit).
- La propriété StartTime qui précise à quel moment débuter la surveillance de la clôture virtuelle.
- La propriété Duration pour laquelle la clôture virtuelle est à surveiller.
function generateGeofence() {
var geofence = null;
try {
var fenceKey = nameElement.value;
var position = {
latitude: decimalFormatter.parseDouble(latitude.value),
longitude: decimalFormatter.parseDouble(longitude.value),
altitude: 0
};
var radiusValue = decimalFormatter.parseDouble(radius.value);
// the geofence is a circular region
var geocircle = new Windows.Devices.Geolocation.Geocircle(position, radiusValue);
var singleUse = false;
if (geofenceSingleUse.checked) {
singleUse = true;
}
// want to listen for enter geofence, exit geofence and remove geofence events
var mask = 0;
mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.entered;
mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.exited;
mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.removed;
var dwellTimeSpan = new Number(parseTimeSpan(dwellTimeField, defaultDwellTimeSeconds));
var durationTimeSpan = null;
if (durationField.value.length) {
durationTimeSpan = new Number(parseTimeSpan(durationField, 0));
} else {
durationTimeSpan = new Number(0); // duration needs to be set since start time is set below
}
var startDateTime = null;
if (startTimeField.value.length) {
startDateTime = new Date(startTimeField.value);
} else {
startDateTime = new Date(); // if you don't set start time in JavaScript the start time defaults to 1/1/1601
}
geofence = new Windows.Devices.Geolocation.Geofencing.Geofence(fenceKey, geocircle, mask, singleUse, dwellTimeSpan, startDateTime, durationTimeSpan);
} catch (ex) {
WinJS.log && WinJS.log(ex.toString(), "sample", "error");
}
return geofence;
}
Rubriques associées
Feuilles de route
Feuille de route pour les applications en JavaScript
Conception de l’expérience utilisateur des applications
Tâches
Gérer des notifications de clôture virtuelle au premier plan
Détecter des événements de clôture virtuelle en arrière-plan
Gérer des notifications de clôture virtuelle à partir d’une tâche en arrière-plan
Référence
Autres ressources
Exemple de géolocalisation Windows 10