2010-10-26 2 views
0

Я разрабатываю приложение сопоставления, используя Eclipse 3.5.Почему минимальное время обновления менеджера местоположения переопределяется при изменении местоположения?

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

Когда я действительно отправляю новое местоположение из элемента управления эмулятором 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(); 
} 
+0

Сообщите нам код – Falmarri

ответ

0

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

Взятые из Reference Android:

общественных недействительные requestLocationUpdates (поставщик String, длинные minTime, плавать minDistance, PendingIntent намерения)

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

Edit, я видел это в вашем коде:

long updateMillis = confData.getMapUpdatePeriod() * 1000; 

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

+0

Я видел это и знал, что это «просто намек». Похоже, это намек, пока место не изменилось. Кажется, я помню, что когда-то в прошлом это работало в эмуляторе, то есть обновления, отправленные до того, как минимальное время было проигнорировано. Я не могу это доказать, и я не собираюсь откатывать версии SDK/plugin. Я считаю, что это багги - он даже не может передавать отправленное имитируемое местоположение без существенной ошибки округления! – NickT

+0

Добавил что-то к моему ответу. Если у вас есть, как это сделать, подключите телефон к ноутбуку и осмотрите DDMS, также установите минимальное расстояние до 0 во время тестирования, посмотрите, как часто он называется, по крайней мере, вы можете решить, действительно ли это проблема или просто проблема эмулятора. – blindstuff

+0

Я пробовал жестко кодировать его, это не имеет значения. Я регистрировал значение только для того, чтобы убедиться, что оно не равно нулю. Значение выводится из сохраненных настроек и настраивается пользователем.У меня на самом деле нет телефона, поэтому я пытаюсь разработать режим энергосбережения, прежде чем отправить apk другу, который имеет. Я не хочу сразу сжимать его аккумулятор! – NickT

Смежные вопросы