2012-05-31 2 views
2

Я разрабатываю приложение, которое использует gps, который работает до тех пор, пока приложение не будет работать. Мой GPS просыпается через 5 минут и получает местоположение, после чего его символ перестает мигать и становится невидимым почти во всех устройствах (Sony xperia, вкладка Samsung, Htc WildFire, Motorola photon), но не в Motorola Defy и Samsung Ace, которые потребляют огромную энергию аккумулятора , GPS получает исправление и становится стабильным и видимым все время. Способ работы GPS этих устройств (Moto Defy и Samsung Ace) отличается. Посмотрите на мой код:GPS работает все время даже после получения местоположения

long _listenerWakeUpTimeInterval=1000*60*5;** //5 minutes 
_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, _listenerWakeUpTimeInterval, 300, locationListener); 

В GPS всех устройств просыпаются через 5 минут, но GPS из этих двух устройств (Moto Defy и Samsung Ace) вызывает метод onLocationChanged(Location loc) каждые 300 метров. Время имеет значение не для этих двух устройств. Когда я путешествую быстро (в автомобиле), это расстояние покрывается за несколько минут (1 или 2 минуты). Поэтому я получаю звонок по методу onLocationChanged(Location loc). И в этих устройствах GPS всегда фиксирован, статичен и видим. Я не хочу называть методы locationManager.removesupdates каждый раз, когда GPS получает исправление. Я использую этот метод только в onDestroy() службы. Поэтому, пожалуйста, скажите, почему GPS этих двух устройств ведет себя иначе, чем другие устройства, и как решить эту проблему?

ответ

1

У меня есть решение этой проблемы. Я использую AlarmManager (повторяющийся сигнал тревоги через каждые 5 минут), чтобы зарегистрировать gps, а затем я запускаю свой Gps в течение 30 секунд и отменю регистрацию Gps. Если мне позвонил onLocationChanged(Location loc), тогда я отменил регистрацию Gps в this method.otherwise (Если я не получаю новое местоположение), я отменил регистрацию Gps через обработчик через 30 секунд. Когда мне нужно снова Gps, я следую тому же самому процессу. Таким образом, мой Gps работает максимум 30 секунд не в течение всего времени, пока не будет запустить.

2

Если вы читали the docs, он говорит:

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

Так что это всего лишь предложение, и реализация может игнорировать его.

Мое предложение заключается в использовании AlertManager для планирования вашего обслуживания каждые 5 минут, а затем в служебной полезной нагрузке запросите одно решение, вызывающее requestSingleUpdate. Это позволит сэкономить аккумулятор. Недостатком является то, что чип GPS занимает некоторое время, пока он не получит сигнал спутников, от 30 секунд до 1 минуты в хороших условиях (Time To First Fix или TTFF). После подачи всех ожидающих запросов снова холодно. Таким образом, при следующем выполнении службы TTFF может быть таким же высоким, как на предыдущей итерации, я думаю. (Если вы не используете NETWORK_PROVIDER, но тогда точность ниже).