Зарегистрированная геозона не будет запускать введенное событие дважды. Почему?

Например, на этом страница MSDN говорит:

Геозоны сохраняются на диске, поэтому их нужно добавить в систему только один раз.

Но я не мог понять, как «использовать» эту функцию. Мое приложение запускает событие входа для зарегистрированной геозоны только тогда, когда я очищаю монитор геозоны (GeofenceMonitor.Current.Geofences.Clear();), а затем воссоздаю их или когда устройство перезагружается.

Чтобы понять мою проблему, у меня есть этот сценарий с официальным образцом геолокации MS UWP:

  1. открыть образец геолокации UWP
  2. 4-й пункт в меню: Геозона переднего плана.
  3. Создайте новую геозону, используйте кнопку «Установить здесь»
  4. В списке зарегистрированных геозон появилась новая геозона
  5. и поскольку я использовал кнопку «Установить здесь» через несколько секунд, я получил событие «Введено» в поле «События».
  6. Все нормально
  7. но
  8. когда я закрываю приложение и запускаю его снова, я обнаружил созданную геозону в поле «Зарегистрированные геозоны» из предыдущего (как и ожидалось), но вот моя проблема - она ​​больше никогда не запускает введенное событие.

Не могли бы вы объяснить мне, почему? Есть ли какой-то «метод перерегистрации», который я должен вызвать? Или я смотрю на это с плохой точки зрения? Или мой подход к вызову GeofenceMonitor.Current.Geofences.Clear(); при каждом запуске приложения правильный?

Спасибо


person Jan Bejvl    schedule 27.07.2016    source источник


Ответы (1)


В ваших шагах я не видел, чтобы вы вызывали состояние Exited. Если вы всегда остаетесь в установленной вами геозоне, GeofenceStateChanged не будет подниматься, когда вы работаете, и, как и то же самое, файл LocationTrigger в фоновой задаче также не срабатывает. Таким образом, вы не получите состояние Entered дважды. Если вы сначала покинете геозону, а затем снова запустите приложение, вы получите событие «Вход» в поле «События».

Кроме того, чтобы геозону можно было использовать более одного раза, необходимо установить свойство Geofence.SingleUse. на false и свойство Geofence.Duration на достаточно большой интервал времени или временной интервал 0.

Чтобы узнать, как использовать геозону в приложениях UWP, см. Руководство по приложениям геозоны и Настроить геозону. А если вы используете Mobile Emulator, вы можете обратиться к этому блогу: Использование эмулятора Windows Phone для тестирования приложений с геозоной.

person Jay Zuo    schedule 29.07.2016
comment
Спасибо. Итак, можно ли принудительно активировать состояние Exited после того, как оно перешло в состояние Entered (например, через 10 минут)? Или мне нужно сделать какой-то обходной путь и поиграть с удалением и добавлением только что введенных геозон? - person Jan Bejvl; 01.08.2016
comment
@HonzaBejvl Насколько я знаю, мы не можем принудительно активировать состояние Exited. Я не уверен, зачем вам это нужно. Обычно пользователь не всегда остается в геозоне, состояние «Выход» должно активироваться рано или поздно. Но мы можем удалить геозону через некоторое время, используя свойство Geofence.Duration. Или мы можем использовать таймер (например, ThreadPoolTimer), чтобы делать то, что мы хотим, когда он переходит в состояние Entered. - person Jay Zuo; 01.08.2016
comment
Спасибо за помощь. Я наконец решил это. Я знаю, что обычно пользователь покидает забор, но это не тот случай. Мое приложение сообщает пользователю, когда поблизости есть автобусная остановка. Я должен использовать относительно большой радиус забора, поэтому высока вероятность того, что пользователь закроет приложение в том же заборе, где приложение было запущено. Решение: когда геозона переходит в состояние «Введено», я сохраняю идентификатор геозоны, когда забор переходит в состояние «Выход», я удаляю этот сохраненный идентификатор. -› Во время запуска я удаляю и добавляю все сохраненные заборы (обычно 0-3) К счастью, у меня всего 250 заборов, так что решение не такое дорогое. - person Jan Bejvl; 06.08.2016