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

标签 android google-maps geolocation mylocationoverlay

我正在使用 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/

相关文章:

android - 试图以编程方式关闭警报警报对话框

java - 如何从 Firebase 存储中检索图像 url 以进行 JSON 解析?

javascript - Titanium 辅助功能订单问题

android - 使用 Fused Location Provider 获取启用/禁用的定位服务信息

objective-c - Objective-C : How to list set of locations with the nearest geolocation

Android 设备选择器不会列出 API 比构建版本更旧的模拟器

android - 通过 html 链接将 android 上的当前位置获取到 map 应用程序中

javascript - Angular Google map - 如何向 map 添加方向

javascript - 地理编码 API 和 DialogFlow 意图获取 ' Error: No responses defined for platform: null '

android - 在 Android 中获取当前国家/地区 - 旅行