Android: правильный подход для определения расстояния между текущим местоположением и какой-либо достопримечательностью?

У меня есть вопрос относительно моего подхода к программированию для Android - эффективен он или нет. Просто чтобы дать вам представление о том, чего я пытаюсь достичь:

На карте есть несколько точек интереса. Если пользователь приблизится к PIT, появится уведомление о расстоянии. Есть допустим 3 уведомления: На расстоянии 1 мили, 0,5 мили и 0,1 мили. Когда пользователь находится более или менее точно на PIT, уведомления больше не отображаются. Пользователь должен управлять автомобилем или другим транспортным средством.

В настоящее время я использую Geofences, чтобы определить, ввел ли пользователь радиус в 1 милю. Если это так, я проверяю расстояние от его текущего местоположения до PIT. Если он находится на расстоянии около 0,5 или 0,1 мили, выдается уведомление. Поэтому я часто проверяю текущее местоположение (сейчас каждые 10 секунд). Если пользователь находится как бы в PIT или, скорее, очень близко, геозона выходит и все готово.

Код работает нормально, и этот подход - первое, что пришло мне в голову при чтении руководств разработчика Android и т. Д. Но есть ли другой подход, который БОЛЕЕ ЭФФЕКТИВЕН?

Хотя это (в настоящее время) удовлетворяет мои потребности, у меня есть две основные проблемы:

  1. Кажется, сильно разряжает аккумулятор. Поскольку пользователь, скорее всего, будет находиться в машине, где он может зарядить свой телефон во время использования, это может быть меньшей проблемой.

  2. Я прочитал количество PIT из файла на SD-карте. В моем примере у меня всего несколько PIT. Но пользователь может изменить исходные данные, чтобы добавить столько, сколько захочет. Google говорит, что для каждого пользователя поддерживается только 100 активных геозон. Но что, если у моего пользователя более 100 PIT? Поскольку я использую Geofence, чтобы определить, нужно ли запускать первое уведомление или нет, это серьезная проблема. Так есть ли альтернатива?


person h4wX    schedule 18.04.2015    source источник


Ответы (1)


У меня есть несколько предложений:

1) Чтобы уменьшить количество исправлений GPS, вы можете рассчитать время сна. Идея состоит в том, чтобы делать частые исправления GPS, когда они находятся рядом с «границей», и несколько раз, когда они находятся далеко. Это может быть дополнительно улучшено за счет учета параметра скорости, возвращаемого GPS. Если, например, пользователь находится в 20 милях от ближайшей границы при скорости 20 миль в час, вы можете легко подождать 30 минут, прежде чем снова включить GPS, просто чтобы привести простой пример.

2) Столкнулся с такой же проблемой. Мое решение состояло в том, чтобы просто выбрать только POI в пределах X миль. Таким образом, вы никогда не рискуете достичь предела в 100. Когда пользователь перемещается на (X-1) миль от своего исходного положения, геозоны перестраиваются с использованием нового местоположения. Если вы считаете, что существует высокий риск наличия такой высокой плотности точек, что описанная выше стратегия все еще может не сработать, я бы подумал о том, чтобы сделать вашу собственную проверку близости полностью на основе GPS, а не геозон.

person cYrixmorten    schedule 18.04.2015
comment
У меня также есть вопрос относительно ограничения в 100. Взяв в качестве источника страницу разработчиков Android, мне не на 100% ясно, что означает ограничение в 100. Могу ли я одновременно иметь только 100 активных геозон? Или я могу иметь только 100 различных геозон для всего приложения? - person h4wX; 19.04.2015
comment
По моему опыту, это ограничение в 100 одновременных активных геозон в вашем приложении. Вот почему у меня работает перестроение геозон, поскольку общее количество активных геозон никогда не превышает 100. Под активным я подразумеваю регистрацию для мониторинга ОС, поэтому состояние геозоны не имеет значения. - person cYrixmorten; 19.04.2015