2015-04-18 2 views
0

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

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

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

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

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

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

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

ответ

0

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

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

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

+0

У меня также вопрос относительно лимита в 100. Принимая на странице разработчиков Android в качестве источника, мне не понятно, что означает предел 100. Могу ли я иметь только 100 активных Geofences одновременно? Или я могу иметь всего лишь 100 различных Geofences для всего моего приложения? – h4wX

+0

По моему опыту, это предел 100 одновременных активных геозондов в вашем приложении. Вот почему это работает для меня, чтобы перестроить геологию, поскольку общее количество активных геозонностей не превышает 100. Активно я имею в виду зарегистрированный для ОС мониторинг, поэтому состояние геозонности не имеет значения. – cYrixmorten