Прослушивание событий геозоны в фоновом режиме (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
Проектирование взаимодействия с пользователем в приложениях
Задачи
Обработка уведомлений геозоны на переднем плане
Обработка уведомлений геозоны из фоновой задачи
Справочные материалы
Другие ресурсы
Пример определения географического положения в Windows 10