Предназначен для управления cредствами геопозиционирования.
Полное описание, параметры и ограничения
СредстваГеопозиционирования (LocationTools)
СредстваГеопозиционирования (LocationTools)
Доступен, начиная с версии 8.3.3.
Методы:
ВключитьОтслеживаниеГеозон (EnableGeofencesMonitoring)
ИспользованиеДанныхГеопозиционированияВключено (LocationDataUseEnabled)
ОбновитьМестоположение (UpdateLocation)
ОтключитьОбработчикИзмененияДоступностиПровайдеров (DetachProvidersAvailabilityChangeHandler)
ОтключитьОбработчикИзмененияМестоположения (DetachLocationChangeHandler)
ОтключитьОбработчикПересеченияГраницОтслеживаемыхГеозон (DetachMonitoredGeofencesBordersCrossingDetectionHandler)
ОтключитьОтслеживаниеВсехГеозон (DisableAllGeofencesMonitoring)
ОтключитьОтслеживаниеГеозон (DisableGeofencesMonitoring)
ПодключитьОбработчикИзмененияДоступностиПровайдеров (AttachProvidersAvailabilityChangeHandler)
ПодключитьОбработчикИзмененияМестоположения (AttachLocationChangeHandler)
ПодключитьОбработчикПересеченияГраницОтслеживаемыхГеозон (AttachMonitoredGeofencesBordersCrossingDetectionHandler)
ПолучитьОтслеживаемуюГеозону (GetMonitoredGeofence)
ПолучитьОтслеживаемыеГеозоны (GetMonitoredGeofences)
ПолучитьПоследнееМестоположение (GetLastLocation)
ПолучитьПровайдера (GetProvider)
ПолучитьПровайдеров (GetProviders)
ПолучитьСамогоТочногоПровайдера (GetMostAccurateProvider)
ПолучитьСамогоЭнергоЭкономичногоПровайдера (GetMostPowerSavingProvider)
ПроверитьВозможностьДобавленияОтслеживаемыхРегионов (CheckAvailabilityOfEnablingGeofencesMonitoring)
Описание:
Предназначен для управления cредствами геопозиционирования.
Доступность:
Мобильный клиент, мобильное приложение (клиент).
Использование в версии:
Доступен, начиная с версии 8.3.3.
Методическая информация
Практические примеры
Прочитать последнее измерение и не подменить неизвестное нулём
Получаем настоящий ДанныеМестоположения из менеджера, проверяем дату, координаты и необязательные характеристики, не печатая точный адрес пользователя.
Где и как запускать
Полный клиентский модуль собственной мобильной управляемой формы. Назначьте команды указанным процедурам; функции/экспортные обработчики разместите на уровне модуля.
Подготовка
Используйте собственное отдельное учебное мобильное приложение и собственный телефон. Эти методы доступны в мобильном клиенте/мобильном приложении (клиент), не в серверном общем модуле и не в тонком клиенте Windows.
Создайте собственную управляемую форму с указанными в уроке командами и вставьте полный модуль одного урока. Для реального чтения/отслеживания вручную разрешите геопозиционирование приложению в ОС; проверьте требуемые разрешения и возможности в настройках собственного мобильного приложения.
Включённая геолокация устройства не равна разрешению конкретному приложению. Провайдер может использовать сеть, быть платным, расходовать батарею или не поддерживать отдельное поле. Отказ в доступе не обходите.
Последнее измерение не обязательно свежее. Точные координаты не выводятся в сообщения, не записываются в файл и не отправляются на ваш сервер. Геопровайдер ОС сам может использовать сеть согласно своим настройкам.
В уроках отслеживания сначала изучите команду остановки. Не закрывайте форму до отключения собственных обработчиков/геозоны. Не используйте чужое приложение или приложение с рабочими геозонами.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
Провайдер = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера(Истина);
Если Провайдер = Неопределено Тогда
Сообщить("Самый точный провайдер недоступен");
Возврат;
КонецЕсли;
Измерение = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
ПоказатьУчебныеХарактеристикиИзмерения(Измерение);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьУчебныеХарактеристикиИзмерения(Измерение)
Если Измерение = Неопределено Тогда
Сообщить("Последнего измерения нет");
Возврат;
КонецЕсли;
Сообщить("Момент измерения: " + Строка(Измерение.Дата));
Точка = Измерение.Координаты;
Сообщить(Точка.Широта >= -90 И Точка.Широта <= 90);
Сообщить(Точка.Долгота >= -180 И Точка.Долгота <= 180);
Сообщить("Высота определена числом: " + Строка(ТипЗнч(Точка.Высота) = Тип("Число")));
Если Измерение.ГоризонтальнаяТочность = Неопределено Тогда
Сообщить("Горизонтальная точность не определена");
Иначе
Сообщить("Горизонтальная точность, м: " + Строка(Измерение.ГоризонтальнаяТочность));
КонецЕсли;
Если Измерение.ВертикальнаяТочность = Неопределено Тогда
Сообщить("Вертикальная точность не определена");
Иначе
Сообщить("Вертикальная точность, м: " + Строка(Измерение.ВертикальнаяТочность));
КонецЕсли;
Если Измерение.Скорость = Неопределено Тогда
Сообщить("Скорость не определена");
Иначе
Сообщить("Скорость, км/ч: " + Строка(Измерение.Скорость * 3.6));
КонецЕсли;
Если Измерение.Направление = Неопределено Тогда
Сообщить("Направление не определено");
Иначе
Сообщить("Направление, градусов: " + Строка(Измерение.Направление));
КонецЕсли;
КонецПроцедурыРазбор по шагам
ДанныеМестоположения не имеет конструктора. Получаем его штатно из геопозиционирования, не заменяем структурой с похожими полями.
ПолучитьПоследнееМестоположение может вернуть Неопределено. В этом случае helper выводит понятное отсутствие и не читает свойства.
Дата относится к моменту измерения, не к времени вызова команды. Здесь не объявляем её UTC и не вычитаем из ТекущаяДата универсальную «давность» без контракта часового пояса.
Координаты — настоящий ГеографическиеКоординаты. Выводим только проверки диапазонов широты/долготы и наличие числовой высоты, не их точные значения.
Горизонтальная/вертикальная точность — метры, скорость — м/с. Для отображения км/ч умножаем известную скорость на 3.6; Неопределено не означает 0.
Направление — градусы, а не градусы широты. Все шесть свойств измерения только для чтения.
Как проверить результат
Для полученного измерения диапазоны координат дают Истина. Недоступные характеристики выводятся отдельными сообщениями, не нулями.
При отсутствии кэша выводится Последнего измерения нет; обновление и постоянное отслеживание не выполняются.
Ожидаемый результат
Разобран настоящий результат измерения с единицами, необязательными полями и ограничениями приватности.
На что обратить внимание
Кэш может быть старым; наличие объекта не доказывает текущее местоположение.
Даже дата/скорость могут относиться к личным данным. Диагностируйте только собственный телефон.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Наблюдать собственное местоположение и остановить подписку
Подключаем один обработчик с порогами 10 метров и 5 секунд, не сохраняем маршрут и не передаём координаты.
Где и как запускать
Полный клиентский модуль собственной мобильной управляемой формы. Назначьте команды указанным процедурам; функции/экспортные обработчики разместите на уровне модуля.
Подготовка
Используйте собственное отдельное учебное мобильное приложение и собственный телефон. Эти методы доступны в мобильном клиенте/мобильном приложении (клиент), не в серверном общем модуле и не в тонком клиенте Windows.
Создайте собственную управляемую форму с указанными в уроке командами и вставьте полный модуль одного урока. Для реального чтения/отслеживания вручную разрешите геопозиционирование приложению в ОС; проверьте требуемые разрешения и возможности в настройках собственного мобильного приложения.
Включённая геолокация устройства не равна разрешению конкретному приложению. Провайдер может использовать сеть, быть платным, расходовать батарею или не поддерживать отдельное поле. Отказ в доступе не обходите.
Последнее измерение не обязательно свежее. Точные координаты не выводятся в сообщения, не записываются в файл и не отправляются на ваш сервер. Геопровайдер ОС сам может использовать сеть согласно своим настройкам.
В уроках отслеживания сначала изучите команду остановки. Не закрывайте форму до отключения собственных обработчиков/геозоны. Не используйте чужое приложение или приложение с рабочими геозонами.
&НаКлиенте
Перем УчебноеОповещениеПоложения;
&НаКлиенте
Перем УчебноеИмяПровайдера;
&НаКлиенте
Процедура НачатьУчебноеОтслеживание(Команда)
Если УчебноеОповещениеПоложения <> Неопределено Тогда
ВызватьИсключение "Сначала остановите собственное отслеживание";
КонецЕсли;
Провайдер = СредстваГеопозиционирования.ПолучитьСамогоЭнергоЭкономичногоПровайдера(Истина);
Если Провайдер = Неопределено Тогда
Сообщить("Самый энергоэкономичный провайдер недоступен");
Возврат;
КонецЕсли;
УчебноеИмяПровайдера = Провайдер.Имя;
УчебноеОповещениеПоложения = Новый ОписаниеОповещения("УчебноеПоложениеИзменилось", ЭтотОбъект, "guide-location");
СредстваГеопозиционирования.ПодключитьОбработчикИзмененияМестоположения(УчебноеОповещениеПоложения, УчебноеИмяПровайдера, 10, 5);
Сообщить("Отслеживается только собственный телефон. Завершите командой ОстановитьУчебноеОтслеживание");
КонецПроцедуры
&НаКлиенте
Процедура УчебноеПоложениеИзменилось(ИмяПровайдера, Измерение, ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры <> "guide-location" Или ИмяПровайдера <> УчебноеИмяПровайдера Тогда
Возврат;
КонецЕсли;
ПоказатьУчебныеХарактеристикиИзмерения(Измерение);
КонецПроцедуры
&НаКлиенте
Процедура ОстановитьУчебноеОтслеживание(Команда)
Если УчебноеОповещениеПоложения = Неопределено Тогда
Сообщить("Собственная подписка не сохранена");
Возврат;
КонецЕсли;
СредстваГеопозиционирования.ОтключитьОбработчикИзмененияМестоположения(УчебноеОповещениеПоложения, УчебноеИмяПровайдера);
УчебноеОповещениеПоложения = Неопределено;
УчебноеИмяПровайдера = Неопределено;
Сообщить("Собственная подписка отключена");
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьУчебныеХарактеристикиИзмерения(Измерение)
Если Измерение = Неопределено Тогда
Сообщить("Последнего измерения нет");
Возврат;
КонецЕсли;
Сообщить("Момент измерения: " + Строка(Измерение.Дата));
Точка = Измерение.Координаты;
Сообщить(Точка.Широта >= -90 И Точка.Широта <= 90);
Сообщить(Точка.Долгота >= -180 И Точка.Долгота <= 180);
Сообщить("Высота определена числом: " + Строка(ТипЗнч(Точка.Высота) = Тип("Число")));
Если Измерение.ГоризонтальнаяТочность = Неопределено Тогда
Сообщить("Горизонтальная точность не определена");
Иначе
Сообщить("Горизонтальная точность, м: " + Строка(Измерение.ГоризонтальнаяТочность));
КонецЕсли;
Если Измерение.ВертикальнаяТочность = Неопределено Тогда
Сообщить("Вертикальная точность не определена");
Иначе
Сообщить("Вертикальная точность, м: " + Строка(Измерение.ВертикальнаяТочность));
КонецЕсли;
Если Измерение.Скорость = Неопределено Тогда
Сообщить("Скорость не определена");
Иначе
Сообщить("Скорость, км/ч: " + Строка(Измерение.Скорость * 3.6));
КонецЕсли;
Если Измерение.Направление = Неопределено Тогда
Сообщить("Направление не определено");
Иначе
Сообщить("Направление, градусов: " + Строка(Измерение.Направление));
КонецЕсли;
КонецПроцедурыРазбор по шагам
Команды НачатьУчебноеОтслеживание и ОстановитьУчебноеОтслеживание должны быть назначены до запуска.
МинимальноеРасстояние передаётся в метрах, МинимальныйПериодВремени — в секундах. Это пороги запроса, не гарантия точного события каждые 5 секунд.
Имя реально выбранного провайдера сохраняется вместе с оповещением. Отключение получает оба тех же значения, не пустые аргументы «отключить всё».
Обработчик получает имя, настоящий ДанныеМестоположения и дополнительный маркер. Маркер — собственная маршрутизация, не средство защиты от поддельных событий.
Не накапливаем измерения в массиве, не строим маршрут, не выводим точные координаты. Тем не менее дата/скорость измерения — личная информация; опыт только на своём телефоне.
Как проверить результат
При доступном провайдере наблюдаются характеристики фактических измерений; Неопределённые поля остаются явно неизвестными.
После остановки новые вызовы этой подписки должны прекратиться. Не считайте уже поставленное в очередь событие доказательством новой подписки.
Ожидаемый результат
Подготовлена ограниченная собственная подписка с точным отключением и без сохранения маршрута.
На что обратить внимание
Отслеживание расходует батарею и требует разрешения приложения. Не оставляйте его активным после обучения.
Порог 10 метров не означает точность GPS ровно 10 метров.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.