Я работаю над приложением с требованием отслеживать текущее местоположение довольно точно в течение длительного периода времени.
Я решил использовать для этой цели API-интерфейс Fused Location Provider, поскольку он предназначен для экономии заряда батареи и повышения эффективности.
В течение некоторого времени тестирования я столкнулся с парой проблем, нарушающих условия сделки, в API-интерфейсе провайдера плавного определения местоположения или еще глубже в стеке программного обеспечения в NETWORK_PROVIDER
(который, как я полагаю, используется провайдером плавного определения местоположения).
- Нестационарные точки доступа Wi-Fi иногда сбивают пользователя с толку на тысячи километров. Похоже, что точки доступа WIFI используются для триангуляции, даже если они являются портативными устройствами. (Модем/Wi-Fi в поезде/Wi-Fi в самолете). В этом случае устройство с большой точностью считает, что оно находится точно не в том месте. Кто-то может возразить, что это можно отфильтровать, но еще больше усложняет ситуацию то, что в объединенном провайдере местоположения происходит какая-то магия, включая датчики, поэтому кажется, что телефон перемещается в этих местах.
- Иногда старые местоположения возвращаются. Я заметил, что после двухнедельного периода непрерывного обновления местоположений старые местоположения начинают появляться снова. Это особенно странно, поскольку местоположения в обратных вызовах имеют новую отметку времени.
- Местоположения с временными метками в будущем: потребовалось много времени, чтобы понять это, но я также заметил, что пользователи получают временные метки в будущем через обратные вызовы своих местоположений. Я сомневаюсь, что на устройстве пользователя установлено неправильное время, потому что метки времени обычно на несколько недель вперед. Решение для этого довольно очевидно, я просто запишу его здесь, чтобы вы, ребята, могли принять его во внимание при фильтрации.
Я пробовал все типы приоритетов LocationRequest и множество различных параметров для них. Проблема нестационарного WIFI остается во всех сценариях и затрагивает все приложения на устройстве, включая собственное приложение Google.
Первое, что пришло на ум, — это просто попытаться игнорировать блокировки местоположения, поступающие через триангуляцию WIFI, но, поскольку нет никакого способа узнать, откуда берется местоположение, используя API-интерфейс Fused location, эта идея была тупиковой.
Отфильтровать эти местоположения также очень сложно, поскольку устройство часто остается в неправильных местах в течение нескольких часов / дней и перемещается туда.
Я обнаружил, что уже есть несколько открытых проблем системы отслеживания ошибок Google, в которых упоминается как минимум проблема 1. (https://issuetracker.google.com/issues/37123060 например) Ни одна из проблем так и не была решена.
Я думаю о том, чтобы навсегда отказаться от провайдера Fused Location, поскольку все, что я пытаюсь сделать, приводит к тупику. Это заставляет меня задать следующие вопросы:
- Неужели ни у кого больше нет таких проблем с блокировкой?
- Есть ли у кого-нибудь из вас опыт работы с альтернативами провайдеру плавного определения местоположения? Я пробовал https://github.com/mapzen/lost, но нашел это общее местоположение шум довольно большой и потребует некоторой работы, чтобы привести его в состояние API Google, и, поскольку он также использует местоположение WIFI, предоставленное Google, вероятно, будет та же проблема.
- Вы бы пошли по пути возврата к подходу только с GPS, возможно, пожертвовав эффективностью батареи?
- Поскольку неправильные местоположения влияют на все приложения на устройстве, включая собственные приложения Google, основанные на местоположении, почему эта проблема не является приоритетной для технического гиганта, который должен иметь наибольший интерес в том, чтобы знать, где в настоящее время находится их клиент?
Спасибо за любую помощь.
EDIT: проблема сейчас также обсуждается на странице https://issuetracker.google.com/issues/37058437
** РЕДАКТИРОВАТЬ (8 августа 2017 г.) Добавлена еще одна странная находка в обратных вызовах местоположения.