android – 如何在用户的当前位置实现实时更新?

我正在使用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丢失修复,根据用户以相同的速度向gps移动的假设,给出地图标记假更新有一个修复.但是只对2-5跳过的实际更新这样做才有意义(只是为了平滑修复丢失几秒钟的情况).

UPD为此,您可以实现一种代理位置监听器,它将严格按照您指定的间隔更新您的标记,例如:每200毫秒,并根据它的存储位置这样做.并且存储的位置可以由真实位置监听器异步更新.位置对象有提供数据的修复时间(参见getTime()方法),您可以使用它来确定是否仍应“预测”下一个标记移动或位置是否足够放弃并通知用户gps没有线索在哪里他们是 :)

点赞