TuGordoBello
TuGordoBello

Reputation: 4509

Why my GPS does not give me the exact location?

I'm trying to get the exact longitude and latitude of a android device. The problem is that when setting data in google maps, I realize that the position is not correct. I think the device is getting any previously saved position

                LocationManager locationManager;
                String svcName = Context.LOCATION_SERVICE;
                locationManager = (LocationManager)getSystemService(svcName);

                Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setPowerRequirement(Criteria.POWER_HIGH);
                criteria.setAltitudeRequired(false);
                criteria.setBearingRequired(false);
                criteria.setSpeedRequired(false);
                criteria.setCostAllowed(true);
                String provider = locationManager.getBestProvider(criteria, true);

                Location location = locationManager.getLastKnownLocation(provider);

                updateWithNewLocation(location);

                locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);

                if (location != null) {
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                    Log.i("lon", longitude+"" );
                    Log.i("lat", latitude+"");
                }else{
                    Log.i("Null", "Es nulo");
                }

LocationListener

private final LocationListener locationListener = new LocationListener() {

    public void onLocationChanged(Location location) {
        updateWithNewLocation(location);
    }

    public void onProviderDisabled(String provider) {
        updateWithNewLocation(null);
    }

    public void onProviderEnabled(String provider) {}

    public void onStatusChanged(String provider,int status,Bundle extras){}
};

xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

How can I fix it?? I need the current position of teh devices

Upvotes: 0

Views: 959

Answers (1)

AlexWien
AlexWien

Reputation: 28727

The line:

  Location location = locationManager.getLastKnownLocation(provider);

delivers the last know, even if that location is from yesterday.

Remove the line, cnage the code appropriate, and wait till you get an location event in onLocationChanged().

  • Further you may check: the timestamp of the location: caluclate the difference to current time and you know if it is a recent location.

  • Further check location getHoricontalAccuracy() (or named similar) if it is above 40m ignore the location.

Upvotes: 3

Related Questions