Проблема с использованием GPS_PROVIDER для местоположения - PullRequest
5 голосов
/ 16 августа 2011

Я разрабатываю приложение для Android, которое использует текущее местоположение пользователя для результата.

Я использую следующий код для получения местоположения:

LocationManager locationManager =
    (LocationManager) getSystemService(LOCATION_SERVICE);

Location currentLocation =
    locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Когда я запускаю его на устройствеэто дает мне нулевое значение для местоположения.

Но когда я использую NETWORK_PROVIDER, он работает нормально, есть ли какие-либо дополнительные настройки для устройства для использования GPS?

Мое устройство - Galaxy Tab P-1000.

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

Вызов getLastKnownLocation() с GPS_PROVIDER возвращает кэшированное значение.Если нет недавнего местоположения, он вернет ноль.Вместо этого используйте обратный вызов LocationListener onLocationChanged().

Это может занять некоторое время, но вы получите новое определение местоположения. Местоположение

NETWORK_PROVIDER не всегда является точным, поскольку оно основано на триангуляции в ячейке

2 голосов
/ 16 августа 2011

Использование:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATES,
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, locationListener);

Для locationListener вы можете использовать это:

LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            // Called when a new location is found by the network location
            // provider.

            String message = String.format(
                    "New Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude());
            Toast.makeText(LbsGeocodingActivity.this, message,
                    Toast.LENGTH_LONG).show();

            if (location != null) {
                GeoPoint point2 = new GeoPoint(
                        (int) (location.getLatitude() * 1E6), (int) (location
                                .getLongitude() * 1E6));

                // Toast.makeText(getBaseContext(),
                // "Latitude: " + location.getLatitude() +
                // " Longitude: " + location.getLongitude(),
                // Toast.LENGTH_SHORT).show();
                //                 
                mapView.getController().animateTo(point2);
                mapView.getController().setZoom(15);

                List<Overlay> mapOverlays = mapView.getOverlays();
                Drawable drawable = LbsGeocodingActivity.this.getResources()
                .getDrawable(R.drawable.new3pin);
                HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(
                        drawable, LbsGeocodingActivity.this);
                point = new GeoPoint((int) (location.getLatitude() * 1E6),
                        (int) (location.getLongitude() * 1E6));

                String address = convertPointToLocation(point);
                String delims = ",";
                String[] tokens = address.split(delims);
                OverlayItem overlayitem = null;
                if(tokens.length==1)
                {

                    overlayitem = new OverlayItem(point,
                            "New Location", "Locality:"+"\nCity:"+"\nCountry: "+tokens[0]);
                }
                else if(tokens.length==2)
                {

                    overlayitem = new OverlayItem(point,
                            "New Location", "Locality:"+"\nCity: "+tokens[0]+"\nCountry: "+tokens[1]);
                }
                else if(tokens.length==3)
                {

                    overlayitem = new OverlayItem(point,
                            "New Location", "Locality: "+tokens[0]+"\nCity: "+tokens[1]+"\nCountry: "+tokens[2]);
                }
                else
                {
                    overlayitem = new OverlayItem(point,
                            "New Location", address);
                }

                itemizedoverlay.addOverlay(overlayitem);
                mapOverlays.clear();
                mapOverlays.add(itemizedoverlay);

                // mapView.invalidate();
            }

        }

Я использовал это в своем коде, и он хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...