Android用户位置为纬度和经度返回0.0

时间:2014-02-07 17:12:21

标签: java android

我有一个类对象,用于检索用户的纬度和经度。在我的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值。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

有人能告诉我这种行为的原因吗?

是的 - 大概是当它显示0,0时,onLocationChanged尚未被调用 - 因为该位置不是立即知道的。您已经请求位置管理员在知道位置时给您回电 - 这与立即获取位置不同。

如果您不想在知道之前向用户报告该位置,您应该记住是否已调用onLocationChanged(或者当最后一次调用时可能 ,以避免显示陈旧数据。)