Einrichten von Geofence-Bereichen (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

In diesem Thema werden Sie durch die Schritte zum Einrichten eines Geofence-Bereichs in der App geführt.

Roadmap: Wie hängt dieses Thema mit anderen zusammen? Weitere Informationen:

Einführung

Sie müssen einige Schritte ausführen, um den Geofence-Bereich einzurichten. Zusätzlich zur Festlegung der Zielregion müssen Sie auch sicherstellen, dass Sie über die passenden Standortberechtigungen verfügen. Zuletzt muss ein Ereignishandler eingerichtet werden, falls der Benutzer diese Berechtigungen ändert, während die App ausgeführt wird.

Überprüfen, ob Positionsdienste aktiviert sind

Bevor Ihre App auf Positionsdaten zugreifen kann, muss Position auf dem Gerät aktiviert sein. Vergewissern Sie sich in der Einstellungs-App, dass die folgenden Datenschutzeinstellungen für den Standort aktiviert sind:

  • Position dieses Geräts... ist aktiviert (gilt nicht für Windows 10 Mobile)
  • Die Einstellung Position der Positionsdienste ist aktiviert.
  • Ihre App hat unter Diese Apps dürfen meinen Standort verwenden die Einstellung Ein.

Aktivieren der Positionsfunktion

Doppelklicken Sie im Projektmappen-Explorer auf package.appxmanifest, und wählen Sie die Registerkarte Funktionen aus. Aktivieren Sie dann in der Liste Funktionen die Option Position. Dadurch wird der Paketmanifestdatei die Gerätefunktion Location hinzugefügt.

  <Capabilities>
    <!-- DeviceCapability elements must follow Capability elements (if present) -->
    <DeviceCapability Name="location"/>
  </Capabilities>

Durchführen der Überprüfung auf Standortberechtigungen

Als Erstes sollten Sie der App während der Initialisierung Code hinzufügen, um den Standort zu erhalten. In Windows fordert das System den Benutzer bei der ersten Verwendung der API durch Ihre App auf, Positionsberechtigungen zu erteilen. Wenn Ihre App keine Berechtigung vom Benutzer hat, weisen Sie den Benutzer darauf hin. Beachten Sie, dass Sie auch ohne Standortberechtigungen einen Geofence-Bereich einrichten können. Sie erhalten jedoch erst Benachrichtigungen, nachdem die Berechtigungen aktiviert wurden.

    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
            }
        );

    }


Durchführen der Überwachung auf Änderungen der Standortberechtigungen

Als Nächstes sollten Sie die Registrierung für Ereignisse bei Berechtigungsänderungen durchführen, falls der Benutzer sich aus irgendeinem Grund dafür entscheidet, die Standortberechtigungen zu deaktivieren. Fügen Sie zuerst die Ereignishandler der Initialisierungsmethode hinzu:


var accessInfo = null;
accessInfo = DeviceAccessInformation.createFromDeviceClass(Enumeration.DeviceClass.location);
accessInfo.addEventListener("accesschanged", onAccessChanged);

Behandeln Sie die Berechtigungsänderung dann, indem Sie den Benutzer darüber informieren, dass das Geofencing nicht funktioniert, wenn die Standortberechtigungen deaktiviert sind:

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);
}

Hinweis  Sie können ermitteln, ob der Benutzer die Positionsdienste in den Einstellungen deaktiviert hat, indem Sie die LocationStatus-Eigenschaft überprüfen. Wenn der Wert Disabled entspricht, ist die Positionsfunktion deaktiviert.

 

Erstellen des Geofence-Bereichs

Nun können Sie einen Geofence-Bereich definieren und einrichten. Beispiele für Werte, die Sie für einen Geofence-Bereich einrichten können, sind:

  • Id zur Identifizierung
  • Kreisförmige Zielregion, die per Geoshape definiert wird
  • MonitoredStates, mit denen angegeben wird, für welche Geofence-Ereignisse Sie Benachrichtigungen erhalten möchten: Betreten der definierten Region, Verlassen der definierten Region oder Entfernung des Geofence-Bereichs
  • SingleUse-Kennzeichen, mit dem der Geofence-Bereich entfernt wird, nachdem alle Zustände, auf die der Geofence-Bereich überwacht wird, erfüllt wurden
  • DwellTime, womit angegeben wird, wie lange sich der Benutzer innerhalb oder außerhalb des definierten Bereichs befinden muss, bevor das enter- oder exit-Ereignis ausgelöst wird
  • StartTime, womit angegeben wird, wann mit der Überwachung des Geofence-Bereichs begonnen wird
  • Duration der Überwachung des Geofence-Bereichs

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;
}

Verwandte Themen

Roadmaps

Roadmap für Apps mit JavaScript

UX-Design für Apps

Aufgaben

Behandeln von Geofence-Benachrichtigungen im Vordergrund

Lauschen auf Geofence-Ereignisse im Hintergrund

Behandeln von Geofence-Benachrichtigungen über eine Hintergrundaufgabe

Referenz

Geoshape

Geofence

Geolocator

Weitere Ressourcen

Geolocation-Beispiel für Windows 10

Geolocation-Beispiel für Windows 8.1

Richtlinien für Geofencing