Сервис геолокации (GeoClue)
Данный сервис получает текущее местоположение устройства.
Общая архитектура
GeoClue работает с клиентами через D-Bus API. Каждое приложение может иметь сколько угодно клиентов, но одному приложению достаточно создать (см. org.freedesktop.Geoclue.Master) одного клиента для работы с GeoClue. Отключение процесса от системной шины D-Bus автоматически удаляет всех его клиентов.
Каждый клиент в любой момент времени имеет не более одного назначенного GeoClue провайдера. На данный момент все провайдеры отделены от GeoClue и являются независимыми D-Bus-сервисами. D-Bus пути и D-Bus имена провайдеров можно получить у GeoClue через D-Bus API org.freedesktop.Geoclue.MasterClient. Все провайдеры обязаны реализовывать интерфейс org.freedesktop.Geoclue.Position, через который можно получать текущее местоположение провайдера. В процессе работы GeoClue может назначить клиенту другой провайдер.
Важно. Имена D-Bus-сервисов и объектные пути могут меняться между релизами ОС. В связи с этим нельзя использовать конкретные значения этих идентификаторов, характерных для версии ОС, в качестве фиксированных зависимостей в приложении.
D-Bus API
- org.freedesktop.Geoclue.Master: создание клиентов;
- org.freedesktop.Geoclue.MasterClient: работа с клиентом;
- org.freedesktop.Geoclue.Position: получение местоположения от провайдера.