Как стать автором
Обновить

Комментарии 28

Я правильно понимаю, что это работает только при включенном интернете? Т. е. просто при работе только GPRS эффекта не будет.
Сорри — GPS.
Если приложение запросило точные координаты, то сработает. И может сработать, если другое приложение запросило точные координаты.
Нет, все прекрасно работает в отсутсвии интернета.
Получается что мы получили местоположение и отрубились? Что можно поменять, чтобы отслеживание местоположения шло постоянно, каждую секунду, как например в навител навигаторе.
Простите за ламерский вопрос.
для этого нужно не отрубаться :)

Дотстаточно прописать
mLocationClient.connect();

Когда подключение случится, можно будет подписаться на получение координат
mLocationClient.requestLocationUpdates(mLocationRequest, this);

и получать их в методе
    public void onLocationChanged(final Location location)   
А можно пример изменений что в вашем коде на гитхабе?
Премного буду благодарен!
сделал отдельную ветку, там переписал и пример использования тоже попровил
У вас в методе
public void locationUpdate(final Location location)

стоит
locationListener.disableMyLocation();

Эта строка разве не вырубит обновление?

У меня в данном методе
myLat = location.getLatitude();
myLng = location.getLongitude();
myLatLnd = new LatLng(myLat, myLng);
myMap.animateCamera(CameraUpdateFactory.newLatLng(myLatLnd), 1000, null);

без вышеперечисленной строчки. Вроде полет нормальный.
Да, вырубить, просто в примере у меня разовое использование. и все правильно, убрать нужно для вашего случая
ocationListener.disableMyLocation();
Судя по коду, вы делаете следование за местоположением. Все можно гораздо проще сделать, без моего кода

googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(final Location location)
            {
                googleMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(),location.getLongitude())));
            }
        });
Попробую.
Попробовал. Довольно не точно определяет координаты, по сравнению с вашим кодом.
Если необходимо обновление в режиме реально времени, то переменные
UPDATE_INTERVAL_IN_MILLISECONDS и FAST_INTERVAL_CEILING_IN_MILLISECONDS

обратить в ноль?
В доках говорят An interval of 0 is allowed, but not recommended, since location updates may be extremely fast on future implementations.
Так что я бы не стал, можете выставить 500 и думаю будет достаточно. Даже одной секунды вполне хватит.
Все просто отлично! Спасибо вам!

P.S.
Может еще знаете как в google map в своем приложении сделать кэш тайлов? Я гоняю камеру myMap.animateCamera по ключевым точкам. Может знаете еще какой метод?
никак, на сколько я знаю, сам задавался такой проблемой, но карты сами достаточно хорошо кэшируют все
Это если есть доступ к интернету, — а если я в тайге?
нет, как у OSM сделать нельзя, к сожалению
Тогда остается только мой метод, к сожалению.
Спасибо!
Я чего-то не понимаю, или вы решили согреть пользователя?
while (this.mLocation == null && System.currentTimeMillis() - sec < TIME_OUT) {}
Да и доступ к переменной mLocation никак не синхронизирован. Вы же читаете ее в цикле из другого потока…
И вы вашим асинктаском, который просто ждет неизвестно сколько времени, блокируете от выполнения другие асинк таски. Экзекьютор для асинктасков однопоточный с 4й версии андроида.
В новой ветке ничего такого уже нет.
так обновите статью, новички такого наворотят потом, просто скопировав куски отсюда )
Ну… это как бы не моя статья ))
На моем телефоне падает:
java.lang.NullPointerException at com.raxel.utils.LocationHelper.useCurrentLocation(LocationListenerGPServices.java:107)
В location null. На Samsung Ace 2
Любопытно. А чем этот способ отличается от получения местоположения через LocationManager?
Тем, что с помощью LocationManager не всегда определяется местоположение. Сервисы гугла решают эту проблему
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации