Lauschen auf Geofence-Ereignisse im Hintergrund (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 einer Hintergrundaufgabe geführt, die auf Geofence-Benachrichtigungen in der App lauscht.

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

Einführung

Nachdem Ihre Geofence-Bereiche erstellt wurden, müssen Sie die Logik für das Eintreten eines Geofence-Ereignisses hinzufügen. Je nach eingerichteten MonitoredStates erhalten Sie ggf. in folgenden Fällen ein Ereignis:

  • Der Benutzer hat eine Zielregion betreten.
  • Der Benutzer hat eine Zielregion verlassen.
  • Der Geofence-Bereich ist abgelaufen oder wurde entfernt. Beachten Sie, dass eine Hintergrund-App für ein Entfernungsereignis nicht aktiviert wird.

In diesem Thema wird beschrieben, wie Sie eine Hintergrundaufgabe einrichten, mit der die App benachrichtigt wird, wenn ein Geofence-Ereignis eintritt. Sie können Ereignisse jedoch auch direkt über die App behandeln, wenn sie ausgeführt wird. Weitere Informationen finden Sie unter Behandeln von Geofence-Benachrichtigungen im Vordergrund und Richtlinien für Geofencing.

Die Überwachung auf ein Geofence-Ereignis im Hintergrund erfordert eine Reihe von Schritten:

  • Deklarieren der Hintergrundaufgabe im App-Manifest
  • Registrieren der Hintergrundaufgabe in Ihrer App: Wenn für die App beim Auslösen des Ereignisses der Zugriff auf das Internet erforderlich ist, z. B. zum Zugreifen auf einen Clouddienst, können Sie dafür ein Kennzeichen festlegen. Sie können mithilfe eines Kennzeichens auch sicherstellen, dass der Benutzer anwesend ist, wenn das Ereignis ausgelöst wird. So können Sie sicher sein, dass der Benutzer die Benachrichtigung erhält.
  • Fordern Sie den Benutzer bei im Vordergrund ausgeführter App auf, der App Standortberechtigungen zu gewähren.

Durchführen der Registrierung für Ereignisse zur Änderung des Geofence-Zustands

Fügen Sie im App-Manifest auf der Registerkarte Deklarationen eine Deklaration für eine Hintergrundaufgabe zum Standort hinzu. Gehen Sie wie folgt vor:

  • Fügen Sie eine Deklaration vom Typ Hintergrundaufgaben hinzu.
  • Legen Sie den Eigenschaftenaufgabentyp Standort fest.
  • Legen Sie einen Einstiegspunkt für die App fest, der aufgerufen wird, wenn das Ereignis ausgelöst wird.

Registrieren der Hintergrundaufgabe

Mit dem unten angegebenen Code wird die Geofencing-Hintergrundaufgabe registriert. Beachten Sie, dass bei der Erstellung des Geofence-Bereichs eine Überprüfung auf Positionsberechtigungen durchgeführt wurde. Weitere Informationen finden Sie unter Einrichten von Geofence-Bereichen.

function registerBackgroundTask() {
    try {
        // Request lockscreen access
        Background.BackgroundExecutionManager.requestAccessAsync().done(
            function (backgroundAccessStatus) {
                var builder =  new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

                // Register the background task
                builder.name = sampleBackgroundTaskName;
                builder.taskEntryPoint = sampleBackgroundTaskEntryPoint;
                builder.setTrigger(new Windows.ApplicationModel.Background.LocationTrigger(Windows.ApplicationModel.Background.LocationTriggerType.geofence));

                // If it is important that there is user presence and/or
                // internet connection when OnCompleted is called
                // the following could be called before calling Register()
                // var condition = new SystemCondition(SystemConditionType.userPresent | SystemConditionType.internetAvailable);
                // builder.addCondition(condition);

                geofenceTask = builder.register();

                geofenceTask.addEventListener("completed", onCompleted);

                LocationTriggerBackgroundTask.updateButtonStates(/*registered:*/ true);

                switch (backgroundAccessStatus) {
                    case Background.BackgroundAccessStatus.unspecified:
                    case Background.BackgroundAccessStatus.denied:
                        WinJS.log && WinJS.log("This app is not allowed to run in the background.", "sample", "status");
                        break;

                    default:
                        // Finish by getting an initial position. This will present the location consent
                        // dialog if it's the first attempt for this application to access location.
                        getGeopositionAsync();
                        break;
                }
            },
            function (e) {
                // Did you forget to do the background task declaration in the package manifest?
                WinJS.log && WinJS.log(e.toString(), "sample", "error");
            }
        );
    } catch (ex) {
        // HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) === -2147024846

        if (ex.number === -2147024846) {
            WinJS.log && WinJS.log("Location Simulator not supported.  Could not get permission to add application to the lock screen, this application must be added to the lock screen before the background task will run.", "sample", "status");
        } else {
            WinJS.log && WinJS.log(ex.toString(), "sample", "error");
        }
    }
}

Verwandte Themen

Roadmaps

Roadmap für Apps mit JavaScript

UX-Design für Apps

Aufgaben

Einrichten von Geofence-Bereichen

Behandeln von Geofence-Benachrichtigungen im Vordergrund

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