У меня есть карта, где я хочу отслеживать текущее местоположение пользователя. GPS, а также «использовать беспроводные сети» активируется в настройках моего телефона.
Тем не менее, поскольку я нахожусь в помещении, я не получаю починку GPS, поэтому местоположение определяется через сеть; Wi-Fi доступно.
У меня запущено приложение Google Maps и мое приложение.
Как ни странно, текущее местоположение отличается между Google Maps и моим приложением, где Google Maps очень точны, в то время как в моем приложении это положение несколько смещено на несколько сотен метров.
В моем приложении я в основном делаю следующее (для целей отладки сейчас):
1) изначально разместить один маркер на карте: геопоинт получен через locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
2) изначально разместить на карте еще один маркер: геопоинт получен через locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Это поместит последние известные местоположения обоих провайдеров на карту (в конце концов, последнее известное извне моего приложения).
3) затем для регулярных обновлений (так как я не получаю починку GPS в любом месте здесь), я делаю:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener);
Вы можете видеть частоту и расстояние, которое я передаю 0 в обоих случаях.
В манифесте приложения предоставляются следующие разрешения:
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
На самом деле мой baseLocationListener действительно вызывается, что я вижу в журнале, но обновленное местоположение как-то совпадает с последней известной текущей позицией (LocationManager.NETWORK_PROVIDER), то же самое lat / lng.
Я подумал, что, может быть, я что-то упустил или пропустил параметр или настройку, или в моем коде есть ошибка. Поэтому я установил несколько других (всего 3) приложений LBS с Android Market, которые также показывают местоположение текущего пользователя. Текущие местоположения, отображаемые в этих приложениях, равны расположению в моем приложении - и все они находятся на расстоянии около 100 метров - но, по крайней мере, одинаковы.
Смотрите скриншот здесь:
скриншот http://img33.imageshack.us/img33/8679/mapproblem.png
http://img33.imageshack.us/img33/8679/mapproblem.png
Теперь мне интересно:
1) как я понимаю, getLastKnowLocation распространяется на всю систему, а не на приложения, почему существуют различия между местоположением на картах Google и всеми другими приложениями?
2) Карты Google не обновляют последнее известное местоположение поставщика?
3) Использует ли Google Карты другой пользовательский провайдер местоположения (т. Е. По причинам лицензирования), отличный от GPS_PROVIDER или NETWORK_PROVIDER, как они есть в SDK?
4) как добиться такого же точного результата с NETWORK_PROVIDER, как это делает Google Maps?