0

我使用新的 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

}

}

4

2 回答 2

0

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

于 2013-10-31T17:09:06.590 回答
0
lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

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

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

因此,如果可能,请尝试将其更改为像 GPS 一样的静态变量。

对不起我的英语不好,情况复杂..

于 2013-10-31T15:46:08.407 回答