Я тут несколько лет назад как-то уже затрагивал тему GPS. Однажды, прогуливаясь по горам Черногории, решил записать GPS-трек, благо программка на смартфоне готовая уже была. Прошли мы тогда с женой немало, треккер выдал 15 км.
Однако, приехав домой, я обнаружил, что записанный трек никуда не годиться. Так как гуляли мы в гористой местности, то, если верить треккеру, благодаря отражению сигнала GPS от гор, приобрели магическую способность мгновенно перемещаться на противоположный склон, а потом сразу назад. Поэтому прошли мы гораздо меньше, наверное, около 10 км или чуть больше. Но самое главное, делится треком не было никакого смысла.
В результате родилась у меня идея написать самому простенький треккер, но только такой, который бы откидывал недостоверные точки на маршруте. Заодно немножко погрузился в тему точности GPS-позиционирования и выяснил,что начиная с версии спутников GPS-IIF они передают сигнал в полосе L5, которая обещала прямо чудеса позиционирования: ошибку менее метра и частоту определения координат 5 раз в секунду.
А тут у меня как раз начал потихоньку морально устаревать смартфончик Alcatel, в связи с чем я с трудом, но все-таки задавил жабу и купил новый смартфон с поддержкой L5. С трудом, потому что в основном пользуюсь смартфоном как телефоном, да и то не очень часто.
В общем, не прошло и года пары лет после покупки смарта, как я вернулся к идее написать треккер. Скопировал код из программки-акселерометра и давай тестить. С печалью обнаружил, что никаких 5 отчетов в секунду нет и рядом. Да и точность, которую мне возвращал Android, лучше не стала, а как бы даже наоборот.
Впрочем, программки, которым требовался GPS, стали работать гораздо лучше. Долго я копался, пытаясь понять в чем дело. Думал, может L5 надо как-то специально активировать. Потом предположил, что в России из-за параноидальных требований государства может производители отключают. В общем, информации очень мало, никто в тему особо не погружается, очень она специфична.
В конечном итоге всё оказалось проще (но это не точно): полез в справочник по API. И тут-то выяснилось, что оказывается то, что я использовал, успело устареть. Но тем не менее исправно работало.
Переписал на новый API. И тут меня ждала частичная удача. На новом API опрос датчиков происходил гораздо чаще, максимальная частота - 3 раза в секунду, но не стабильно, все-таки чаще в районе 1 раза в секунду. 5 Гц пока так ни разу и не увидел. Не знаю почему, может новых спутников пока не достаточно, или еще в чем-то дело.
Точность новое API выдает такую же, как и старое и не лучше, чем было на стареньком Alcatel. Тем не менее, точки лежат более ровно, сильных выбросов в стороны от траектории сейчас нет.
Есть лишь один вопрос (из многих) к Гугл: если старое API продолжает работать, то почему оно не может возвращать данные чаще? Никаких принципиальных преград я к этому не вижу.
Тестирую свое приложение дальше и обнаруживаю, что оно не работает в фоновом режиме. Трачу кучу времени на то, что бы понять, где я налажал в программе. В конечном итоге выясняется, что начиная вроде с 29 версии Android они ввели дополнительное разрешение, которое нужно запрашивать у пользователя на опрос GPS в фоновом режиме.
Ладно, добавляю это разрешение. Не работает в фоне! Копаюсь дальше. И выясняю, что начиная с 30 версии (на которую я как раз за пару недель до этого обновил смартфон) этого разрешения недостаточно! Для каждой такой программы нужно запрашивать специальное разрешение у Гугл, разрешение пользователя недостаточно!
То есть я специально купил устройство, которое имеет необходимое для меня оборудование и возможности, сам написал для него программку для индивидуального использования, но не могу использовать её даже в отладочном режиме! Это просто апофеоз свободы! И все это ради нашей безопасности! )))
Я как-то в поездке в Питер обратил внимание на надписи: "Ради вашего удобства..." и "Ради вашей безопасности...", их там много было. Но на самом деле, по факту, это было не ради моей безопасности или удобства посетителей. Все эти надписи были лишь для удобства обслуживающих организаций.
В Гугле, думаю, тоже самое. Им плевать на безопасность пользователей, да и не обеспечивается она таким образом все равно, лишь некоторым, таким как я, слегка жизнь усложняет. Самое главное - чтобы к Гуглу ни у кого не возникло претензий.
Конечно, ради маленького треккера я не буду оформлять заявку в Гугл, тем более имею крайне негативный опыт взаимодействия с ними. Решу вопрос как-нибудь проще: например, отключу тач-скрин и покрашу экран в черный цвет. На устройствах с AMOLED-экраном это будет почти что тоже самое по энергопотреблению, что выключить устройство кнопкой. Правда, это не будет полноценным фоновым режимом. )
Как я понимаю, это столько из-за безопасности, сколько из-за батарейки. Уж очень быстро приложения в старом андроиде выжирали батарейку работая в фоне. Это была основная причина, почему я с него ушел тогда. А «написал программку сам для себя», случай, увы, никого не интересует, ибо таких мало :(
ОтветитьУдалитьДа ладно! Пользователю в 29 версии можно было просто не давать разрешение приложению на работу GPS в фоновом режиме и это решило бы проблему.
УдалитьКроме того, новый интерфейс они замутили как раз ради того, что бы снизить энергопотребление в фоновом режиме, когда данные GPS собираются с нужной для приложения частотой, но передаются ему существенно реже. Например, данные о положении собираются раз в секунду, потом накопленные данные одним пакетом раз в минуту отдаются приложению.
Думаю, что все же они это сделали из-за волны, поднятой в соц. сетях о тайном сборе данных о локациях пользователей всякими разными левыми приложениями. Им проще урезать права, чем судится.
> можно было просто не давать разрешение
ОтветитьУдалитьЭто подход программиста :))) А обычный пользователь не знает что определение местоположения сильно жрет батарейку и будет сильно раздражен что телефон лежа в кармане сел за пару часов.
Я Гугл не защищаю, сам пытаюсь запретить все что можно… Так мысли в слух.
Как бы да...
УдалитьС другой стороны, нельзя же считать всех людей полными баранами. Тем более, что с разрешением на фоновое определение местоположения все хитро у гугла: его недостаточно прописать в манифест. Сразу после инсталляции это право все равно не работает и перед тем, как реально включить фоновое определение местоположение, нужно спросить у пользователя, не против ли он. При чем спрашивается через системный диалог и никак иначе, где гугл мог бы просто напомнить пользователю, что геолокация быстро разрежает аккумулятор.