Android: LocationManager динамически регулирует пороговые значения minTime / minDistance

Это способ прослушивания обновлений местоположения GPS (с использованием LocationManager и LocationListener ):

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new MyLocationistener(); // LocationListener
locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 
        30000, // milliseconds (minTime)
        20, // meters (minDistance)
        listener );

Но я хотел бы динамически настроить аргументы minTime и minDistance , используемые LocationManager # requestLocationUpdates . Моя цель - сэкономить заряд батареи в соответствии с несколькими политиками использования, а именно:

  • Если пользователь не двигается, увеличьте minTime, чтобы получить обновление местоположения
  • Если пользователь движется очень быстро, увеличьте minDistance
  • Если пользователь находится в помещении (без покрытия GPS), увеличьте оба
  • . Если аккумулятор слишком низкий, увеличьте оба значения
  • ... (любая другая эвристика)

. Я хотел бы знать:

  1. Действительно ли это хорошая идея для экономии заряда батареи?
  2. Как я могу выполнить такие настройки? Я могу снова вызвать LocationManager # removeUpdates и LocationManager # requestLocationUpdates , если есть единственная альтернатива.
  3. Есть ли у вас какие-либо идеи или примеры кода, которые вам известны для реализации такого рода адаптивных алгоритмов?

Редактировать: Приложение представляет собой систему отслеживания, чтобы узнать, где находятся люди, чтобы назначать задачи человеку, ближайшему к заданному положению. На самом деле батарея едва ли длится 8 часов, поэтому я бы хотел увеличить ее.

8
задан Guido 22 August 2010 в 20:38
поделиться

2 ответа

AFAIK вам нужно позвонить removeUpdates и requestLocationUpdates еще раз.

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

Но чтобы дать вам больше идей, вам нужно представить саму проблему. Не пытайтесь оптимизировать слишком рано, пока у вас не возникнет проблема. Если у вас есть, вы должны опубликовать подробности об этом.

4
ответ дан 5 December 2019 в 22:15
поделиться

Действительно ли это хорошая идея для экономии заряда батареи?

Скорее всего, нет. AFAIK, GPS-радио будет постоянно, и это самая большая разрядка батареи в том, что вы описываете. Способ сэкономить заряд батареи - удалить обновления, чтобы радио GPS отключилось. Однако в следующий раз, когда вы запросите обновления местоположения, GPS потребуется некоторое время, чтобы получить свое первоначальное исправление.

Если пользователь находится в помещении (нет покрытия GPS), увеличьте оба параметра

Если вы не можете получить данные по GPS, выключите радио и повторите попытку через несколько минут (или на основе события пользовательского интерфейса или чего-то еще) . Нет смысла оставлять GPS включенным, если он вам не помогает.

Если батарея разряжена, увеличьте обе.

Если батарея разряжена, выключите GPS. Либо переключитесь на поставщика с низким энергопотреблением (используйте Критерии , чтобы найти его), либо откажитесь от данных о местоположении. Позвольте пользователю решить, что «слишком мало», через предпочтения.

1
ответ дан 5 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: