我只需要在应用启动时找到用户的位置。我是否仍需要创建自己的侦听器,实现所有方法,并调用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) {
}
});
答案 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()
不会要求位置提供商更新当前位置。因此,如果设备最近没有更新当前位置,则该值可能不存在或已过期。
返回的位置对象包括提供它的提供者可用的所有位置信息,如纬度,长度,方位,高度,速度和定位的时间。