Почему местоположение моих приложений обновляется в два раза быстрее, чем я указал? - PullRequest
1 голос
/ 04 октября 2011

В моем приложении я настроил менеджер местоположений для обновления текущего местоположения каждые 10 минут (или так я думал) Вместо этого я получаю обновления каждые 5 минут:

10-03 23:45:17.153: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-03 23:50:23.162: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-03 23:55:23.074: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-04 00:00:23.077: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m

Вот код:

LocationManager locationManager = (LocationManager)
                   this.getSystemService(Context.LOCATION_SERVICE);

LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        Log.d(APP_TAG, "Location updated with accuracy: " + location.getAccuracy() + "m");
    }
    //Other methods are empty and omitted for brevity
};

int TEN_MINUTES = 10 /*Minutes*/ * 60 /*sec per min*/ * 1000 /*ms per sec*/;
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
                                         TEN_MINUTES, 0, locationListener);

Может кто-нибудь объяснить, почему это не работает, как я думал? Например. почему его обновление каждые 5 минут вместо 10?

Ответы [ 3 ]

5 голосов
/ 04 октября 2011

Как отмечено в документации для LocationManager.requestLocationUpdates ():

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

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

Более подробный ответ, что, вероятно, потребуется знание о том, как работает конкретный приемник GPS в вашем телефоне.

0 голосов
/ 04 октября 2011

Поведение странное, если не сказать больше. В документации сказано, что эти параметры являются лишь подсказками. Один вопрос, на который я не могу ответить:

Являются ли аргументы времени и расстояния логическим ИЛИ или логическим ИЛИ при принятии решения об отправке обновления?

Если это условие ИЛИ, то, если ОС считает, что вы переместились на расстояние, превышающее минимальное расстояние, оно может обновиться.

0 голосов
/ 04 октября 2011

Вы уверены, что это не просто ваш журнал обновляется каждые пять минут?

Когда я делал что-то подобное в locationListener, я ставил проверку, чтобы убедиться, что 10 минут действительно прошли.

if(System.CurrentTimeMillis() > updateTime + currentTimeInMillis)
{
 update your log here
 currentTimeInMillis = System.CurrentTimeMillis();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...