2017-01-17 4 views
5

Я использую платный провайдер местоположения в своем приложении, которое установлено в PRIORITY_HIGH_ACCURACY с интервалом в 60 секунд. Обычно это работает, но иногда местоположение не обновляется в течение 5-10 минут, и я, открывая Карты Google, кажется, запускает обновление местоположения.Fused Location GPS не обновляется до открытия Google Maps

Кто-нибудь еще, кто мог бы столкнуться с этой проблемой или знает о возможных причинах такого поведения? Есть ли способ исправить это?

+0

У вас есть прекрасное разрешение на размещение? –

+0

Да, как мелкие, так и грубые. – Zishan

+0

Вы запрашивали обновления местоположения или периодически проводили опрос метода getLastLocation()? –

ответ

0

Gps не всегда возвращает местоположение, даже если оно доступно через FusedLocationProvider api или LocationManager LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER). Особенно, если вы находитесь в помещении, у него меньше шансов получить местоположение от Gps в зависимости от вашего устройства. Gps необходимо зафиксировать, чтобы вернуть местоположение.

Вы можете написать тестовое приложение, в котором есть LocationManager с Gps, Wifi и GpsStatusListener, чтобы проверить подсчет спутников, спутников в исправить и уровень сигнала спутникового сигнала и сравнить их с FusedLocationProvider в одно и то же время и добавить местоположения, предоставленные для отображения в качестве маркеры. Вы также можете найти Location.getExtras() для FLP, который может содержать информацию о спутниках. Даже если LocationManager Gps доступен, а количество спутников - 2, я не могу получить местоположение из Gps.

Hello World в изображении должно быть местоположением Gps, но оно не возвращается, так как оно еще не исправлено. LocationManager Gps Status test Тестирование может не решить вашу проблему, но вы можете сравнить ситуации, в которых вы попадаете, или вы не можете, например, может потребоваться использовать 3 спутника для получения местоположения от Gps или минимального уровня сигнала. Также может потребоваться слишком много времени для блокировки Gps, а статус на GpsStatusListener установлен на GpsStatus.GPS_EVENT_FIRST_FIX, когда он заблокирован. Потребовалось около 5 минут, чтобы у меня Gps зафиксировался и вернул место. Я также написал еще один тест с картами, и у меня была такая же проблема, пока Gps не зафиксирован как в LocationManager, так и в FLP.

0

Мои выводы из следующего link Поставщик плавного местоположения будет поддерживать только фоновое местоположение, если к нему подключен хотя бы один клиент. Как только первый клиент подключится, он немедленно попытается получить местоположение. Если ваша деятельность является первым клиентом для подключения, и вы сразу вызываете getLastLocation() в onConnected(), может быть недостаточно времени для первого местоположения. Это приведет к тому, что местоположение будет null.

Для решения этой проблемы вам нужно подождать (неопределенно), пока провайдер не получит местоположение, а затем позвоните по номеру getLastLocation(), что невозможно узнать.

Другой (лучший) вариант - реализовать интерфейс com.google.android.gms.location.LocationListener для получения периодических обновлений местоположения (и отключить его, как только вы получите первое обновление).