Прослушивание событий геозоны в фоновом режиме (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этом разделе описывается пошаговая настройка фоновой задачи на прослушивание уведомлений Geofence в вашем приложении.

Схема создания: каким образом эта тема связана с другими? См.:

Введение

После создания геозон вам потребуется добавить логику для обработки действий при возникновении события геозоны. В зависимости от настройки элемента MonitoredStates вы можете получить событие, если:

  • пользователь вошел в отслеживаемую область;
  • пользователь покинул отслеживаемую область;
  • срок действия геозоны истек или она была удалена. Обратите внимание, что для события удаления фоновое приложение не активируется.

В этом разделе описывается, как настроить фоновую задачу, которая будет оповещать приложение при возникновении события геозоны. Вы также можете обрабатывать события непосредственно из приложения, в котором работаете. Дополнительные сведения см. в разделах Обработка уведомлений геозоны на переднем плане и Руководство по настройке геозон.

Для прослушивания события геозоны в фоновом режиме требуется выполнить несколько шагов.

  • Объявите фоновую задачу в манифесте приложения.
  • Зарегистрируйте фоновую задачу в приложении. Если приложению требуется доступ к Интернету, например к облачной службе, при возникновении события, вы можете установить для него флажок. Можно установить еще один флажок, чтобы убедиться в присутствии пользователя при инициации события. Таким образом вы будете уверены, что пользователь получил уведомление.
  • Так как приложение выполняется на переднем плане, предложите пользователю разрешить приложению доступ к информации о расположении.

Регистрация событий при изменении состояния геозоны

В манифесте приложения на вкладке Объявления добавьте объявление для фоновой задачи расположения. Для этого:

  • Добавьте объявление типа Фоновые задачи.
  • Присвойте задаче свойства тип Расположение.
  • Задайте точку входа в приложение для вызова при инициации события.

Регистрация фоновой задачи

Следующий код регистрирует фоновую задачу настройки геозоны: Помните, что при создании геозоны мы проверили разрешения на доступ к информации о местоположении. Дополнительные сведения см. в разделе Настройка геозоны.

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

Связанные разделы

Схемы создания

Схема создания приложений на JavaScript

Проектирование взаимодействия с пользователем в приложениях

Задачи

Настройка геозоны

Обработка уведомлений геозоны на переднем плане

Обработка уведомлений геозоны из фоновой задачи

Справочные материалы

Geoshape

Geofence

Geolocator

Другие ресурсы

Пример определения географического положения в Windows 10

Пример определения географического положения в Windows 8.1

Руководство по настройке геозон