Перечисление GNSS_GEOFENCE_STATE (gnssdriver.h)
GNSS_GEOFENCE_STATE перечисляет различные состояния одной геозоны.
Синтаксис
typedef enum {
GNSS_GeofenceState_Unknown,
GNSS_GeofenceState_Entered,
GNSS_GeofenceState_Exited
} GNSS_GEOFENCE_STATE;
Константы
GNSS_GeofenceState_Unknown Состояние геозоны неизвестно. |
GNSS_GeofenceState_Entered Введена геозона. |
GNSS_GeofenceState_Exited Геозона завершена. |
Комментарии
Следующие битовые маски используются HLOS для запроса оповещений об изменении состояния для геозон:
#define GNSS_GEOFENCEALERTTYPE_ENTRY GNSS_GeofenceState_Entered // Enter Geofence
#define GNSS_GEOFENCEALERTTYPE_EXIT GNSS_GeofenceState_Exited // Exit Geofence
Оповещение о входе возникает, когда предыдущее состояние геозоны было неизвестно или завершено, а устройство вошло в геозону.
Оповещение о выходе возникает, когда было введено предыдущее состояние геозоны и устройство завершило работу с геозоной. Если предыдущее состояние геозоны было неизвестным и устройство в настоящее время находится за пределами геозоны, оповещение о выходе не будет создано.
Платформа расположения отправляет триггер выхода в приложения только в том случае, если предыдущее известное состояние для ограждения находится внутри забора. Это решение заключается в том, чтобы избежать переполнения событий выхода в конфигурации геозоны (например, если пользователь не настраивает забор выхода из дома, должен быть уведомлен о том, что он находится за пределами дома, если он настраивает уведомление, когда он уже находится за пределами дома). Тем не менее, платформа определения местоположения может обрабатывать, где драйвер GNSS отправляет события выхода, но это не рекомендуется, так как тогда взаимодействие между адаптером GNSS и драйвером GNSS станет очень подробным. Учитывая, что шансы пользователя на вход в геозону гораздо меньше, чем у пользователя за пределами геозоны, такое поведение снижает требуемое взаимодействие между драйвером GNSS и адаптером GNSS. Например, в случае 100 геозон, отправленных в драйвер GNSS, и пользователь находился за пределами всех них, без этого поведения потребуется отправить адаптеру GNSS 100 уведомления о выходе. Вероятность того, что что-то подобное произойдет для событий входа, очень мала.
Ниже показаны переход состояния геозоны и связанные оповещения. Для простоты подразумеваются условия границ гистерезиса и геозоны.
Ниже приведены ключевые аспекты этой схемы состояний.
При переходе из GNSS_GeofenceState_Unknown в состояние GNSS_GeofenceState_Exited не создается оповещение.
Если подсистеме GNSS вообще не удается отслеживать какие-либо геозоны, необходимо создать одно глобальное оповещение о состоянии отслеживания, а не одно оповещение для каждой геозоны. Подсистема GNSS может поддерживать последнее известное состояние для каждого ограждения, а не переходить в состояние GNSS_GeofenceState_Unknown, чтобы при повторном отслеживании можно было создавать необходимые оповещения геозоны на основе нового обнаружения входа и выхода.
Поддержание этого последнего известного состояния в настоящее время не требуется, так как после того, как драйвер GNSS вызовет событие с gnss_geofences_tracking_status как FAILURE, платформа расположения в HLOS начнет отслеживать геозоны. В течение этого времени подсистема GNSS должна продолжать проверка, в оптимизированном для питания способе, если геозоны можно будет отслеживать снова. IHV может использовать оптимизации для обеспечения этого обнаружения при низком энергопотреблении. Ниже перечислены распространенные методы оптимизации.
Прогрессивная откат
Ожидание недорогих сигналов, которые свидетельствуют о перемещении устройств, таких как данные ускорителя или уведомления об изменениях сотовой связи или Wi-Fi.
Запрос сеанса отслеживания расстояния с низкой точностью из HLOS с помощью общедоступных API-интерфейсов Geolocation WinRT.
Низкое энергопотребление проверяет наличие спутникового сигнала.
Когда подсистема GNSS снова сможет отслеживать геозоны, она обменивается данными, устанавливая для gnss_geofence_tracking_status значение SUCCESS для адаптера GNSS или HLOS.
Адаптер GNSS будет выдавать GNSS_ResetGeofenceTracking команды и повторно добавлять активные в настоящее время геозоны с текущими критериями входа и выхода для каждой геозоны. Это необходимо сделать в случае изменения набора отслеживаемых геозон или изменения состояния любой геозоны.
Требования
Требование | Значение |
---|---|
Заголовок | gnssdriver.h |