我有一个类对象,用于检索用户的纬度和经度。在我的UI线程中,我在创建Activity的onCreate方法中创建了对象:
userLocation = new UserLocation(this);
以下是课程代码段:
public UserLocation(Context mContext) {
//Pass parameter to class field:
this.mContext = mContext;
//Fetch the user's location:
fetchUserLocation();
}
public void fetchUserLocation() {
// Acquire a reference to the system Location Manager:
LocationManager locationManager = (LocationManager)this.mContext.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates:
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//Manage the data recieved:
makeUseOfLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
private void makeUseOfLocation(Location location) {
//Split the data of the location object:
userLatitude = location.getLatitude();
userLongitude = location.getLongitude();
}
/**
* @return userLatitude
*/
public double getLatitude() {
return userLatitude;
}
/**
* @return userLongitude
*/
public double getLongitude() {
return userLongitude;
}
现在回到主线程中,当按下按钮时,会收集纬度和经度:
// GET THE LATITUDE AND LONGITUDE OF THE USER:
currentLatitude = userLocation.getLatitude();
currentLongitude = userLocation.getLongitude();
现在我要启动应用程序,如果我立即按下该按钮,则纬度和经度的接收值均为0.0。
但是,如果我启动应用程序并等待4-5秒然后按下按钮,则会收到正确的值。
有人能告诉我这种行为的原因吗?
我在编写方法时注意到,当用户启动应用程序时,如果字段为空,则收集纬度和经度。那么这又会返回不受欢迎的0.0值。
谢谢!
答案 0 :(得分:0)
有人能告诉我这种行为的原因吗?
是的 - 大概是当它显示0,0时,onLocationChanged
尚未被调用 - 因为该位置不是立即知道的。您已经请求位置管理员在知道位置时给您回电 - 这与立即获取位置不同。
如果您不想在知道之前向用户报告该位置,您应该记住是否已调用onLocationChanged
(或者当最后一次调用时可能 ,以避免显示陈旧数据。)