GPS работает на эмуляторе, но не на устройстве

#android #gps

#Android #gps

Вопрос:

Я создал приложение, которое отлично работает на эмуляторе (используя telnet и geo fix), но на устройстве обратные вызовы LocationListener вообще не вызываются.

Я уже проверил разрешение (на manifest.xml ), проверил, активен ли GPS (он есть и отлично работает в Google Maps, и спутниковый рисунок отображается при включении моего приложения).

У кого-нибудь есть какие-либо подсказки о том, что может происходить?

Ответ №1:

Ты:

(1) создайте ключ разблокировки на своем компьютере?

(2) получить ключ RELEASE API от Google на основе отпечатка MD5, сгенерированного вашим ключом release?

(3) встроите этот ключ Google в свой код или xml?

(4) подпишите свое приложение ключом разблокировки?

Если вы не помните, что получали второй ключ (release) с сайта Google, в этом проблема.

Если подумать, GPS все равно должен работать, просто вы не получите карту

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

1. О чем вы говорите? Какой ключ? LocationListener не имеет такой функции, не так ли?

2. Если вы хотите использовать карты Google, вам понадобится ключ release API для запуска на устройстве. Все приложения должны быть подписаны либо ключом отладки, либо ключом выпуска. Если он опубликован, это должен быть ключ выпуска, см. developer.android.com/guide/publishing/app-signing.html

3. Но карты Google ДЕЙСТВИТЕЛЬНО работают! Я говорю, что мое приложение, которое не работает!

Ответ №2:

Если ваша программа не вызывает ваш метод onLocationChange, то вы, вероятно, находитесь внутри или где-то еще, где вы не можете получить сигнал GPS. Попробуйте выйти куда-нибудь на улицу, откуда хорошо видно небо.

Какие методы вы определили в своем прослушивателе местоположения? Потому что функции onProviderDisabled и onProiderEnabled должны работать даже без сигнала GPS.

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

1. Действительно, вы вроде как правы. Я тестировал это несколько минут назад на Galaxy Tab, и в его logcat было написано, что точность была больше 50 метров (где я нахожусь, это 60), и, таким образом, onLocationChange был проигнорирован.

2. Точность GPS зависит от того, сколько спутников находится в поле зрения (а также от несовершенных файлов орбиты, погоды в верхних слоях атмосферы и других вещей, которые вы не можете легко исправить). Для большей точности перемещайтесь туда, где у вас есть четкое представление обо всем небе. Вы не должны ожидать точности намного лучше, чем 5 метров или около того, даже с учетом 9-10 сат. Есть отличное бесплатное приложение под названием GPS Status, которое сообщает вам, где находится каждый спутник в небе и принимает ли телефон сигнал.

3. Не то… Я имею в виду, как я увеличиваю маску точности. Приложение отлично работает даже с ошибкой в 150 метров.

4. Если gps способен вычислить местоположение, он вызовет onLocationChanged независимо от точности. Возможно, вам следует заглянуть в network_provider вместо GPS_PROVIDER, если вам не нужна большая точность.

5. Тогда в чем проблема? Пока это работает только на эмуляторе… На Nokia ничего не происходит (и onLocationChanged никогда не вызывается) на Sansumg я получаю это сообщение

Ответ №3:

Проблема действительно была связана с точностью, GPS не работает, когда он неточный.

Но загрузка Wi-Fi вручную не удалась.

Правильное решение — использовать класс Criteria, а затем автоматически находить «лучшего поставщика» на основе критериев. Он будет принимать значения с плохой точностью, а также последние значения, когда они более точные, и еще много чего, имитируя поведение GPS в приложении Google Maps.