我使用新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
}
}
答案 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,例如最后的已知。 在那种情况下,等待下一个位置,直到时间差小于几秒钟。