我正在使用 MyLocationOverlay 来显示当前位置。但是,位置更新需要一段时间。我想在 iPhone 上实现类似“跟随我”的功能,其中用户的位置也会随着用户的移动而移动。如何使 MyLocationOverlay 的标记对其位置执行实时更新?
请注意,我重写了 draw() 和 drawMyLocation(),因为我需要绘制自定义标记。
我当前的代码如下所示:(我的代码的问题是标记不会随着用户移动。由于在调用 onLocationChanged 之前需要一段时间,标记会突然从一个地方跳到另一个地方。 )
@Override
public synchronized void onLocationChanged(Location location)
{
if (location != null && mapController != null)
{
//Recenter map based on current location
mapController.animateTo(new GeoPoint((int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)));
}
super.onLocationChanged(location);
}
最佳答案
您可以为位置管理器提供最小间隔以在调用该方法之间等待,但它不会在 100% 的时间内完全介意该间隔(参见 LocationManager.requestLocationUpdates() 的描述)。可能更短,可能更长 - 因为,例如可能是多云,gps 芯片将无法像您希望的那样定期获取位置更新。
没有合适的方法来克服这个问题——位置服务总是有缺陷的。我使用的每个位置感知应用程序都会时不时地“挂起”标记,因为 GPS 芯片暂时无法修复。
你唯一能做的就是记住移动的速度,如果 gps 失去修复,基于用户以相同的速度向相同的方向移动的假设,给 map 标记假更新是 gps 修复的时候。但只有在跳过 2-5 次实际更新时才有意义(只是为了平滑丢失修复几秒钟的情况)。
UPD 为此,您可以实现某种代理位置监听器,它将严格按照您指定的时间间隔更新您的标记,例如每 200 毫秒,并根据它的存储位置执行一次。并且存储的位置可以由真实位置监听器异步更新。 Location 对象具有提供数据的修复时间(参见 getTime() 方法),您可以使用它来确定您是否仍应“预测”下一个标记移动,或者该位置足够旧以放弃并通知用户 gps 没有线索他们在哪里:)
关于android - 如何实现对用户当前位置的实时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178521/