Почему минимальное время обновления Location Manager переопределяется при изменении местоположения? - PullRequest
0 голосов
/ 27 октября 2010

Я разрабатываю картографическое приложение с использованием Eclipse 3.5.

Я устанавливаю минимальный период обновления с помощью метода requestLocationUpdates для LocationManager через операцию настройки.Когда я устанавливаю свойство, я вижу в Logcat, что системный процесс устанавливает значение ОК.

Когда я на самом деле отправляю новое местоположение из элемента управления эмулятора DDMS и местоположение меняется в представлении карты, я вижу, что системаЗатем процесс устанавливает минимальное время на ноль.

Ниже приведен захват системных журнальных сообщений.Вы можете видеть, что я устанавливаю период в 32 секунды, затем 16, а затем, после того, как я отправил смоделированное изменение местоположения, система устанавливает его на ноль

Карта реагирует на изменения местоположения на изменения местоположения мгновеннодаже если они отправляются с интервалом всего в несколько секунд.

Кто-нибудь знает, почему система использует мое минимальное время?

10-26 22:21:09.770: DEBUG/GpsLocationProvider(54): setMinTime 32000
10-26 22:21:53.011: DEBUG/GpsLocationProvider(54): stopNavigating
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): setMinTime 16000
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): startNavigating
10-26 22:21:57.900: DEBUG/GpsLocationProvider(54): setMinTime 16000
10-26 22:22:39.099: DEBUG/GpsLocationProvider(54): TTFF: 41290
10-26 22:22:39.350: DEBUG/GpsLocationProvider(54): setMinTime 0
10-26 22:22:51.740: DEBUG/GpsLocationProvider(54): TTFF: 53925
10-26 22:22:51.820: DEBUG/GpsLocationProvider(54): setMinTime 0
10-26 22:22:56.780: DEBUG/GpsLocationProvider(54): TTFF: 58967
10-26 22:22:56.879: DEBUG/GpsLocationProvider(54): setMinTime 0

соответствующий код, ниже, enableGPS () вызывается вonResume ()

    private void enableGPS() {

    if (confData.getTrackMode() == AppConstants.GPS_ON) {
        if (lm == null)
            lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        long updateMillis = confData.getMapUpdatePeriod() * 1000;
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                updateMillis, confData.getMapMinResendDistance(), this);
    }

}

и слушатель

    public void onLocationChanged(Location location) {

    List<Overlay> overlays = mv.getOverlays();
    lo = new MyLocationOverlay(this, mv);
    overlays.add(lo);
    lo.enableMyLocation();
    int lat = (int) (location.getLatitude() * 1E6);
    int lng = (int) (location.getLongitude() * 1E6);
    GeoPoint point = new GeoPoint(lat, lng);
    mc.setCenter(point);
    mv.invalidate();
}

1 Ответ

0 голосов
/ 27 октября 2010

Во-первых, использование Android с эмулятором действительно полно ошибок, я пробую все апы с реальным телефоном, если это связано с использованием GPS, когда я получаю непоследовательное поведение.

Взято из Android Ссылка:

public void requestLocationUpdates (поставщик строк, long minTime, float minDistance, намерение PendingIntent)

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

Редактировать, я видел это в вашем коде:

long updateMillis = confData.getMapUpdatePeriod() * 1000;

Я предполагаю, что это просто то, что возвращает константу? Или это метод андроида? почему бы просто не установить его на 60000 или что-то подобное вручную?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...