我正在使用 skobbler/telenav SDK 开发一个 Android 应用程序,也称为 SKMaps。我目前正在使用 SKRouteManager 和 SKNavigation 管理器以及相应的侦听器实现一个简单的 gps 导航系统。到目前为止,我已经能够通过使用 google api 将邮政编码地理编码到 gps 位置来设置我的导航目的地。我也有替代路线,并且 SKNavigationListener 的 onReRoutingStarted() 事件正常工作。但是,我对 onDestinationReached() 有一个问题 - 当我到达目的地时它似乎没有被调用,所以我的导航不会停止。因此,如果我继续驾驶并通过目的地点,应用程序会再次重新路由我。onDestinationReached() 是否存在问题或在实施时是否有任何特殊要求?
我认为它应该可以工作,因为它首先成功地计算了路线,所以它应该知道目的地点,我不应该以任何其他方式指定它。但是当我到达路线的尽头时,该方法不会被应用程序调用。
我还遇到了 SKNavigationListener 事件的另一个问题 - onUpdateNavigationState(SKNavigationState navigationState)。在方法中,我试图获取 SKNavigationState 对象应该能够提供给我的一些信息。问题如下:
- Eclipse 无法识别方法 getDistanceToDestination() - 就像它没有在 SKNavigationState 类中定义一样。
- getCurrentAdviceCurrentStreetName() 返回 null
- 据我了解 getCurrentAdviceDistanceToAdvice() 应该给我到我将收到另一个建议的点的距离,而 getCurrentAdviceDistanceToDestination() 应该给我到路线终点的剩余距离。这两种方法都应该以米为单位返回距离,但是当我的路线只有 5 公里长时,它们为我提供了一些非常大的数字(超过 10 亿)。此外,有时它们返回 0。
- onUpdateNavigationState(SKNavigationState 导航状态) 应该在跟随路线时被多次调用,并且每次都为我提供有关导航状态的新信息。它确实被多次调用,但是当我使用上述方法时,它们会继续返回相同的值(如果我重新启动应用程序,值会发生变化,但在单次测试期间它们会给我相同的值)。
如果有人知道可能出了什么问题。这真的很令人困惑,因为我可以使用 getCurrentSpeed() 从 SKNavigationState 对象成功获取当前速度。但不知何故,有些方法似乎不存在,而另一些则返回没有意义的值。