Android locationlistener onlocationchanged не работает

Обратный вызов OnLocationChanged никогда не вызывается

Я пытаюсь узнать текущее местоположение пользователей с помощью LocationManager . Я провел много исследований и не могу найти никого с такой же проблемой. Обратный вызов OnLocationChanged , кажется, никогда не вызывается. Ниже мой код и файл logcat.

Мой OnCreate() метод

Мой registerLocationUpdates метод

Мои разрешения в AndroidManifest

И, наконец, логарифм после запуска приложения

И части местоположения пакета SDK для Android в logcat продолжают повторяться сами по себе. Я перепробовал все, что мог придумать, и видел в Google и stackoverflow. Также в качестве примечания я смог заставить его работать на устройстве 2.3, используя requestSingleUpdate , который доступен в API 9, и следуя руководству Подробное описание местоположения, но мне нужно, чтобы он работал на версии 2.1 или 2.2 и выше с использованием старого SDK. Итак, если у вас есть какие-либо подсказки или вы хотите узнать больше, дайте мне знать. Заранее спасибо.

15 ответов

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

Таким образом, вы получите ВСЕ возможные обновления. И закомментируйте часть о получении последнего известного местоположения. Пока это не нужно.

Тогда в onLocationChanged() просто оставьте

Закомментируйте остальное, чтобы ваш слушатель оставался активным. Это должно дать вам поток обновлений на реальном устройстве. В эмуляторе вам нужно использовать DDMS, и вы будете получать одно обновление GPS каждый раз, когда нажимаете кнопку «Отправить».

В моем случае даже после написания правильного кода я не получил местоположение с помощью client.requestLocationUpdates(locationRequest, this, it) . В телефоне GPS также был включен с помощью

Потратив время на переключение эмуляторов, сборок и т. Д., Наконец выяснилось, что режим определения местоположения был «Только устройство», и он не давал результата на эмуляторе. Переключился на «Высокая точность» и заработал.

Это случилось со мной, когда локацию отключили. Не разрешение местоположения для приложения, а местоположение самого устройства Android. Запрос, чтобы пользователь активировал GPS, исправил это для меня:

Вам также может потребоваться выключить и снова включить GPS, чтобы вызвать диалоговое окно для повышения точности определения местоположения:

Это должно происходить из-за настроек вашего телефона. В настройках местоположения телефонов, если для режима службы определения местоположения установлено значение «Только GPS», функция обратного вызова OnLocationChanged вызывает функцию «Исправление GPS». При выборе параметров «Использовать GPS», «WI-FI и мобильные сети» местоположение будет определяться с использованием этих трех провайдеров. Это займет меньше времени, чтобы определить местоположение вашего устройства. *** Путь к доступу к службам определения местоположения может быть изменен с устройства на устройство. Спасибо

У меня 2 устройства: Samsung Galaxy S4 (Android 5.0.1) и Vertex Win (Android 8.1).

На Самсунге все работает правильно и быстро, координаты GPS определяются, вызывается onLocationChanged .

В Vertex в приоритете PRIORITY_BALANCED_POWER_ACCURACY он, вероятно, сначала взаимодействует с сетевым провайдером, поэтому он находит координаты через Wi-Fi. Но он не может правильно определить, включена ли служба определения местоположения (через некоторое время устройство думает, что оно включено, пока оно выключено, и вызывает метод addOnSuccessListener для LocationServices.getSettingsClient . Поэтому я переключился на PRIORITY_HIGH_ACCURACY и получил еще один сюрприз. Сетевой провайдер отключился, но onLocationChanged не был вызван, поэтому я не смог получить координаты. Я скачал GPS tester (как посоветовал @ Li3ro) из Play Market и увидел, что спутники видны, но без фиксированного сигнала Я не мог принимать сигнал внутри здания.

Читайте также:  Обновить планшет хуавей mtdiapad7litell до 6 андроид

Даже автономные карты не могли получать координаты, а вот открытые — могли. Итак, после того, как я ушел, я смог найти свои координаты в приложении.

См. Также https://stackoverflow.com/a/27828929/2914140, где говорится о приоритетах и ​​распознавании ошибок ( отключение GPS через некоторое время, если координаты не найдены).

Как ответил Phan Van Linh , вероятно, это потому, что вы находитесь внутри здания. Здесь есть объяснение о том, как имитировать GPS для эмулятора. Кроме того, существует приложение this, которое издевается над Данные GPS.

У меня была такая же проблема (onLocationChanged () никогда не вызывалась с помощью NETWORK_PROVIDER) на моем реальном устройстве (M, targetSDK 23 приложения), пока я не перезапустил его.

Если вы пытаетесь использовать NETWORK_PROVIDER, действительно сложно протестировать:

  • на эмуляторе: никогда не работай
  • на реальном устройстве: работает только getLastKnownLocation (), чтобы получить onLocationChanged (), вы должны использовать мобильные данные и выйти на улицу с риском потерять телефон от грабителя: P

Я предполагаю, что причина в том, что это просто местоположение сетевого провайдера, а не само ваше устройство, и сетевой провайдер никогда не перемещается, поэтому onLocationChanged () никогда не вызывается. Это может произойти только при переключении между мобильными данными и Wi-Fi и наоборот. Пожалуйста, поправьте меня, если я ошибаюсь.

Поэтому я предлагаю использовать GPS_PROVIDER, чтобы поэкспериментировать, прежде чем рассматривать производительность и использование батареи. Он отлично работает как на эмуляторах, так и на реальных устройствах. Лучшая практика: https://developer.android.com/guide/topics. /location/strategies.html

Мне потребовалось несколько часов, чтобы протестировать NETWORK_PROVIDER без каких-либо результатов, поэтому, надеюсь, мое предложение будет полезным.

Я столкнулся с той же проблемой. Я получал getLastKnownLocation как null. Проблема устранена, когда я перезапустил и устройство, и службу определения местоположения на устройстве.

Источник

OnLocationChanged не вызывается на некоторых устройствах

Это вопрос, который задавался много раз, но я не мог найти решение, которое всегда срабатывает.

Я разрабатываю приложение, используя провайдера Fused location. В onConnected() я запрашиваю обновления местоположения, и логика приложения будет инициирована после создания исправления местоположения и onLocationChanged() . (См. Мой код ниже).

Проблема onLocationChanged() никогда не вызывается на некоторых устройствах. Я использую Samsung Tab 2 и Samsung Galaxy Grand для тестирования. Этот код отлично работает на вкладке 2, но не работает на Grand. Не работает, я имею в виду, что locationClient подключается, но onLocationChanged() никогда не вызывается.

Раньше я использовал диспетчер местоположений для получения местоположения и в этой реализации, возникла одна и та же проблема. Таким образом, я попытался реализовать провайдера плавного доступа, но у меня все еще есть та же проблема.

Может ли кто-нибудь помочь мне решить эту проблему? Что-то мне здесь не хватает?

Я наблюдал такое же поведение на Galaxy Nexus и узнал две вещи, вызывающие onLocationChanged() чтобы их не вызывали. Есть

Соответствующий источник местоположения не включен в системных настройках. Для PRIORITY_HIGH_ACCURACY необходимо включить GPS-спутники , чтобы PRIORITY_BALANCED_POWER_ACCURACY должно быть включено Wi-Fi и местоположение мобильной сети .

Даже для источников с включенным местоположением не может быть действительной информации о местоположении. Например, источник PRIORITY_HIGH_ACCURACY включен, но нет (или не хорошего) приема GPS (например, устройство находится внутри здания). Или включен источник PRIORITY_BALANCED_POWER_ACCURACY , но оба Wi-Fi и мобильные данные отключены. В таких случаях местоположение не может быть обнаружено, а onLocationChanged() не будет вызываться.

Читайте также:  Android 4 htc a3333 wildfire

Чтобы исправить №1, я должен был проверить, включены ли требуемые источники местоположения даже до подключения к API сервисов Google, и если они отключены, я уведомил пользователя, который попросил его / ее разрешить доступ к местоположению.

Чтобы решить # 2, я решил использовать LocationRequest.setExpirationDuration() . Я установил тайм-аут примерно через 10 секунд, и сразу после вызова requestLocationUpdates() я отправляю обратный вызов с задержкой на те же 10 секунд. Если вызывается обратный вызов с задержкой до requestLocationUpdates() , это означает, что местоположение не может быть обнаружено по причине № 2. Я делаю три попытки, а затем показываю пользователю сообщение об ошибке.

Документация на Android в этом месте невелика, поэтому я надеюсь, что это поможет.

С ним ваш интервал составляет 0,1 секунду, поэтому очень сложно для чипсета gps обнаружить местоположение. Ваш интервал должен быть> 1 секунда (со мной это> 10)

LocationRequest он должен быть установлен:

setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) потому что PRIORITY_BALANCED_POWER_ACCURACY на открытом воздухе не получает местоположение. Код будет выглядеть так:

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

Посмотрите, получаете ли вы пройденное местоположение, тестируя if (loc == null). Несмотря на то, что это один и тот же провайдер, возможно, какое-то устройство возвращается и бомбардирует, что приводит к тому, что он не стреляет.

Это, возможно, не имеет смысла, но перед этим я столкнулся с этой проблемой, кто-то предположил, что вы должны создать свой собственный LocationListener вместо того, чтобы позволить MainActivity реализовывать LocationListener . В основном это:

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

Я решил это, установив оба параметра, минимальное расстояние и минимальное время между обновлениями до 0. В соответствии с тем, что я тестировал на двух устройствах, теперь onLocationChanged () вызывается регулярно после запроса обновлений.

Попробуйте удалить и переустановить « google play services ». Установите его с следующей ссылки google google , google play services

Источник

LocationListener NETWORK_PROVIDER включен, но onLocationChanged никогда не вызывается

Я разрабатываю приложение, которое занимает позицию сотового телефона в течение всего 6 и 6 минут в сервисе, оно отлично работает, но иногда метод OnLocationChanged из прослушивателя сетевого провайдера перестает быть вызванным, и я не знаю почему.

Это почему-то перестает быть вызванным, но поставщик включен, и Lister работает, когда я разрешаю или отключаю Провайдера вручную, onProviderEnabled и onProviderDisabled .

Это просто происходит с NETWORK_PROVIDER , GPS_PROVIDER работает хорошо.

Отчет в Samsung Galaxy S3:

По-прежнему получаю «Сем-синал» в течение 4 дней подряд.

Эта проблема уже произошла с Galaxy Y и LG Optimus l5

Я сделал еще один тест, чтобы узнать, получили ли другие приложения позиции NET, и я обнаружил, что они передают одну и ту же проблему, они не могут получить позицию NET только через GetLastknowLocation; Чтобы проверить, что я использовал Galaxy S3 с этой проблемой, и я отключил поставщик GPS. (Протестировано в Цербере).

Я не мог найти объяснений, почему слушатель NETWORKSLOCATIONS перестает давать позиции, но может быть, потому что он не должен работать в течение 2 или 3 дней без остановки.

Я провел несколько тестов с другими приложениями, чтобы проверить, не возникает ли эта проблема с моим назначением, и я обнаружил, что они передаются по одной и той же проблеме, например, в Cerberus:

Читайте также:  Androidapksfree com instagram en uptodown com android versions trashbox ru link instagram android

Я отключу GPS-провайдера в мобильном телефоне (Galaxy S3) с проблемой «Семь синала», посмотрите:

Мой отчет:

И Цербер (печать, сделанная в 14/05/2013) сообщает:

Но когда я открывал Карты Google, он, похоже, работает нормально, я попытался переместиться на дистанционное место, чтобы посмотреть, будет ли он показывать GetLastknowLocation , но нет, карты google помещают меня в нужное место в данный момент, поэтому я понял, что Карты Google использовали motionevent для перемещения меня на карту;

А также распечатайте журнал Google Maps, чтобы получить NetWorkProvider:

У меня возникли аналогичные проблемы с сетевым провайдером, и только решение было принудительным перезапуском устройства . Хотя карта google всегда показывала правильное местоположение, потому что она также использует информацию других датчиков, кроме поставщика сетевого местоположения.

Но вот хорошая новость , а не долгое время назад. Google представил Fuse Location Provider api через свою сервисную платформу Google Play, которая очень проста в использовании, чем поставщики GPS / Network Location.

Совместимость до уровня API 8, теперь, когда я получаю эту странную проблему с сетевым провайдером, в то же время Fused Location дает мне точное местоположение (без перезагрузки устройства).

Я совершил один рабочий проект FusedLocation Test здесь , вы можете клонировать и тестировать себя.

Ниже приведен фрагмент кода: –

У меня точно такая же проблема, и единственным решением для меня является перезагрузка устройства. Что интересно, что ни одно из приложений не содержит информацию о местоположении, кроме карт Google.
Google Maps приложение каким-то образом находит свое местоположение! ..

PS с помощью службы LocationListener в сервисе, поэтому это определенно не проблема плохой ссылки, мертвого объекта и т. Д.

У меня все еще есть эта проблема. Но я все еще ищу ответ, я попытался реализовать это в слушателе NETWORK_PROVIDER:

Потому что: OUT_OF_SERVICE, если поставщик не работает, и это не ожидается в ближайшем будущем; TEMPORARILY_UNAVAILABLE, если поставщик временно недоступен, но ожидается, что он будет доступен в ближайшее время; И AVAILABLE, если поставщик в настоящее время доступен. onStatusChanged

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

Кажется, проблема с сетевым провайдером была обнаружена в Android Open Source Project, Issue Tracker: https://code.google.com/p/android/issues/detail?id=57707 . Короче говоря, выпуск был опубликован 17 июля 2013 г. – последний блог 7 января 2015 г., выпущенный с Android 4.1.x, появляется на самых разных устройствах: «Не разрешено в последней библиотеке службы воспроизведения», никаких обходных решений, предложенных в блоге, не было.

Я понимаю кое-что в нашем вопросе; Вы вызываете метод requestGPS, а затем dicover его location.If gps включен, получил через gps. Othervise gott через NET. Когда вы вызываете requestGPS и управляете провайдером, чем получаете lat-lang, но удаляете обновления. (Не вызывайте, потому что вы удалили триггер обновлений);

NETWORK_PROVIDER не обновляется, когда GPS-устройство телефона работает и получает сигнал. Если вы отключите GPS и заставите телефон получать свое местоположение из сети, вы снова начнете получать обновления.

Я думаю, это потому, что ваше приложение «убито» в фоновом режиме. Я столкнулся с этой проблемой раньше, и я решил ее, переместив создание службы LocationListener в службу. Обязательно сохраните ссылку на слушателя. Это может решить проблему.

Источник

Оцените статью