我的经纬度已经过时了

时间:2013-10-31 15:40:58

标签: android gps location

我使用新API获取位置:android。https://developer.android.com/training/location/retrieve-current.html

有些时候,当我到达该位置时,它已经过时了。我在某个地方出去然后去另一个地方,然后应用程序将第一个位置返回给我。当我出WiFi时就会发生这种情况。当我使用WiFi时,它工作得很好。我错过了一些方法还是别的什么?

public class NewGPSTracker implements
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener,
    LocationListener, com.google.android.gms.location.LocationListener {


private LocationRequest lr;
private LocationClient lc;
Location location;
double latitude = 0;
double longitude = 0;
Context context;
static Boolean status = false;  
public int res = 0;
boolean conectado;

public  NewGPSTracker(Context context) {
    this.context = context;
    lr = LocationRequest.create();
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    lr.setInterval(5000);       
    lr.setFastestInterval(1000);
    lc = new LocationClient(context, this, this);       
}

@Override
public void onLocationChanged(Location location) {  

    if (conectado) {
        lc.removeLocationUpdates(this);
        lc.requestLocationUpdates(lr, this);
        location = lc.getLastLocation();
        if(location != null){
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }

    }

}

@Override
public void onConnectionFailed(ConnectionResult arg0) {     
    Log.e("NewGPSTracker", ""+arg0);

}       

@Override
public void onConnected(Bundle connectionHint) {
    conectado = true;
    Log.i("NewGPSTracker", "Google Play Services Conectado.");
    lc.requestLocationUpdates(lr, this);    

    location = lc.getLastLocation();

    if(location != null){
    latitude = location.getLatitude();
    longitude = location.getLongitude();

    }
}   

public double getLatitude() {
    return latitude;
}

public double getLongitude() {
    return longitude;
}   


public void connect(){
    lc.connect();
}

public void disconnect(){
    lc.disconnect();
}   


@Override
public void onDisconnected() {

}


public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub

}

public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

}

}

2 个答案:

答案 0 :(得分:0)

lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

我完全不知道你在用什么。但是当我在这种情况下使用谷歌API时,解决了类似的问题。

现在排在最前面总是使用GPS / WI-FI的 HIGH_ACCURACY 。你的情况看起来像WI-FI总是..如你所知,有两种方法可以找到用户的位置。 (GPS / WI-FI)当您更改GPS位置而不打开 WI-FI 时,它应该首先显示。

因此,如果可能的话,尝试将其更改为GPS等静态变量。

抱歉我的英语不好,情况复杂..

答案 1 :(得分:0)

计算位置的时间戳与当前时间的差值。 如果它超过几秒钟,它是一个旧的positoin,例如最后的已知。 在那种情况下,等待下一个位置,直到时间差小于几秒钟。