Android 为什么getLastLocation()方法有时会获取过期的位置?
我正在使用新的api获取位置。但即使有了这个新的api,我的设备的位置也过时了。此方法(getLastLocation())获取的位置已过期。如果wifi正常,则会获取任意位置。但当wifi关闭时,它会得到一个旧位置。谷歌地图应用程序怎么能如此快速地获取位置 这是我正在使用的类:Android 为什么getLastLocation()方法有时会获取过期的位置?,android,gps,maps,location,android-location,Android,Gps,Maps,Location,Android Location,我正在使用新的api获取位置。但即使有了这个新的api,我的设备的位置也过时了。此方法(getLastLocation())获取的位置已过期。如果wifi正常,则会获取任意位置。但当wifi关闭时,它会得到一个旧位置。谷歌地图应用程序怎么能如此快速地获取位置 这是我正在使用的类: public class NewGPSTracker implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayService
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;
public int res = 0;
boolean connected;
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);
sp = context.getSharedPreferences("GPS", 0);
editor = sp.edit();
}
@Override
public void onLocationChanged(Location location) {
if (connected && location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
@Override
public void onConnected(Bundle connectionHint) {
Log.i("NewGPSTracker", "Google Play Services Conectado.");
lc.requestLocationUpdates(lr, this);
connected = true;
location = lc.getLastLocation();
if (connected && location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.i("Location", ""+latitude + " "+longitude);
}
}
@Override
public void onConnectionFailed(ConnectionResult arg0) {
Log.e("NewGPSTracker", ""+arg0);
}
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
}
}如果我理解你的问题,你想知道为什么WiFi关闭时报告的位置已过期。
LocationClient.getLastLocation()
方法将只返回“当前可用的最佳最近位置”。这意味着,当您不使用WiFi时,可能会发生以下两种情况之一
getLastLocation()
方法将返回上次连接时的最后一个位置。这将导致在调用该方法时返回旧位置LocationClient
类以及在应用程序中使用位置的方法的更多信息,您可以从Android开发者网站查看这些源代码
请从下载示例应用程序。看看这个问题:那么,如果该方法有时获取旧位置,我如何获取atual位置?那么您又在执行
getLastLocation
?您已经请求了,因此您肯定会在onLocationChanged
方法中获得更新的位置。