Как API getLastLocation работает внутренне? Он возвращает значение null, даже если параметр местоположения включен.

Я читал несколько вопросов по этому поводу, но не нашел нужного ответа. Я хочу понять, как getLastLocation работает внутри. Как обновляется последнее известное кэшированное значение местоположения?

У нас есть требование, где нам нужно получить последнее известное местоположение устройства. Может ли кто-нибудь объяснить, как работает getLastLocation? Я видел, что API getLastLocation возвращает значение null, даже если настройка местоположения включена. В то же время, если я проверил приложение Google Map, и оно может получить местоположение (конечно, оно должно использовать requestLocationUpdates или любой другой API).

На своем Nexus-5 я заметил, что getLastLocation возвращает null даже после того, как я запускаю приложение Google Map, а затем снова запускаю свое приложение. Даже если местоположение определено правильно в приложении Google Map, getLastLocation API возвращает значение null.

Как система Android обновляет последнее известное местоположение? Он обновляется только тогда, когда некоторые приложения запрашивают местоположение через API requestLocationUpdates? Если система Android автоматически обновляет последнее известное местоположение, почему API getLastLocation возвращает null?

getLastLocation API Получение последнего известного местоположения

На что следует обратить внимание:

  1. Предоставляется разрешение на размещение.

  2. Настройка местоположения включена

  3. Один и тот же код работает на нескольких устройствах, но не работает на нескольких устройствах.

  4. Я пытаюсь получить местоположение с помощью API-интерфейса Google FusedLocationProviderAPI и Android Framework LocationManager.

  5. Я проверил все существующие вопросы на Stackoverflow

Было бы здорово, если бы кто-нибудь мог объяснить, при каких обстоятельствах API getLastLocation может возвращать null, даже если параметр местоположения включен. Кто-нибудь знает, как это работает внутри?


person Santosh Salunke    schedule 18.04.2017    source источник
comment
Можете поделиться кодом?   -  person CodeCameo    schedule 18.04.2017
comment
Проверьте этот ответ. stackoverflow.com/questions/20438627/   -  person Faraz    schedule 18.04.2017
comment
Этот вопрос повторяется, проверьте stackoverflow.com/questions/16830047/   -  person Rajesh Nasit    schedule 18.04.2017
comment
у вас есть разрешения на местоположение?   -  person Vladyslav Matviienko    schedule 18.04.2017
comment
Отредактировал вопрос. Здесь проблема не в коде. Мне интересно узнать, как getLastLocation работает внутри. Чем отличается поведение устройства от устройства?   -  person Santosh Salunke    schedule 18.04.2017
comment
Вы видели этот вопрос?   -  person Qandeel Abbasi    schedule 18.04.2017
comment
И убедитесь, что ваш googleapiclient подключен с помощью обратных вызовов подключения   -  person Qandeel Abbasi    schedule 18.04.2017
comment
Да, я видел упомянутые вопросы. С кодом проблем нет, потому что он иногда работает. Я убедился, что googleapiclient подключен. Здесь я не могу понять, почему API getLastLocation возвращает значение null, даже если местоположение включено. Как система Android управляет этим кешированным местоположением? Слушает ли он местоположение автоматически ИЛИ нужно ли принудительно вызывать requestLocationUpdate, чтобы иметь кешированное значение в getLastLocation API?   -  person Santosh Salunke    schedule 18.04.2017


Ответы (1)


getLastLocation: этот метод предоставит вам последнее доступное местоположение на вашем устройстве.

В некоторых случаях, если у вашего устройства нет последнего местоположения, оно вернет null.

Вы должны использовать метод onLocationChanged для текущего местоположения.

См. Пример здесь: вы его получите https://developer.android.com/training/location/receive-location-updates.html

Согласно док.

public abstract Location getLastLocation (клиент GoogleApiClient)

Возвращает самое последнее доступное на данный момент местоположение.

Если местоположение недоступно, что случается очень редко, будет возвращено значение null. Будет возвращена наилучшая доступная точность при соблюдении разрешений на определение местоположения.

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

Надеюсь, это поможет вам.

person Jitesh Mohite    schedule 18.04.2017
comment
Да, я согласен, что могу слушать обновления местоположения. Это доступное решение, но мне любопытно понять, почему getLastLocation возвращает null, даже если параметр местоположения включен. Вы знаете, как это работает внутри? - person Santosh Salunke; 18.04.2017
comment
как я объяснил выше, если у вашего устройства нет последнего местоположения, оно вернет null. Последнее местоположение будет доступно только тогда, когда ваше устройство ранее выбрало местоположение. - person Jitesh Mohite; 18.04.2017
comment
Правильно, мое местоположение включено, сеть доступна. Все условия выполнены. Я двигаюсь. По-прежнему getLastLocation возвращает null. Я не могу понять, как это реализовано внутри. Система Android автоматически прослушивает изменение местоположения, чтобы обновить это последнее известное кэшированное значение? - person Santosh Salunke; 18.04.2017
comment
В некоторых случаях, если у вашего устройства нет последнего местоположения, оно вернет null .: Какие это случаи? Знаете ли вы, при каких обстоятельствах getLastLocation возвращает значение null, даже если настройка верна? - person Santosh Salunke; 18.04.2017
comment
На своем Nexus-5 я заметил, что getLastLocation возвращает null даже после того, как я запускаю приложение Google Map, а затем снова запускаю свое приложение. Даже если местоположение определено правильно в приложении Google Map, getLastLocation API возвращает значение null. - person Santosh Salunke; 18.04.2017