如果我只需要找到一次位置,是否需要调用requestLocationUpdates()?

时间:2014-04-11 20:11:17

标签: java android location locationmanager locationlistener

我只需要在应用启动时找到用户的位置。我是否仍需要创建自己的侦听器,实现所有方法,并调用requestLocationUpdates()?它看起来像很多无用的代码:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 999999999, 999999999, new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    @Override
    public void onProviderEnabled(String provider) {
    }
    @Override
    public void onProviderDisabled(String provider) {
    }
});

3 个答案:

答案 0 :(得分:2)

我从未使用它,但从API级别9开始,有一种名为requestSingleUpdate的方法,可能是您正在寻找的方法。

另一种解决方案是使用requestLocationUpdates并在收到第一次更新后立即取消注册侦听器,例如:

@Override
public void onLocationChanged(Location location) {
    locationManager.removeUpdates(this);
    // do something with the received location
}

在您的用例中,您可以将侦听器的其他方法留空,无需实现它们。

答案 1 :(得分:1)

您不需要,但使用lastKnownLocation并不能保证您获得准确的位置甚至是位置,因此您最终可能会使用requestLocationUpdates()来获得准确的位置

答案 2 :(得分:0)

您可以使用getLastKnownLocation(provider)查找由特定提供商确定的最后一个位置修复。

Location location = locationManager.getLastKnownLocation(provider);

请注意,getLastKnownLocation()不会要求位置提供商更新当前位置。因此,如果设备最近没有更新当前位置,则该值可能不存在或已过期。 返回的位置对象包括提供它的提供者可用的所有位置信息,如纬度,长度,方位,高度,速度和定位的时间。