常见问题解答

产品信息

问题

网络

数据

界面自定义

路由

模拟器

工作流

产品信息

您的应用必须实现一个对话框,其中显示每个驾驶员都必须接受的 Navigation SDK 服务条款通知。此对话框可让驾驶员同意服务条款。条款的文本文件随 Navigation SDK 提供。
在 Android 中,使用 NavigationApi.showTermsAndConditionsDialog 方法显示包含字词的对话框。
在 iOS 中,调用 GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName
Google 地图移动版支持的所有语言均自动可供 Navigation SDK 使用。 设备具有默认系统语言,并且应用无法更改该设置;不过,应用可以支持 70 多种语言。

是。在 Android 中,启动后,LocationListener 会继续在后台运行。您的应用继续紧贴位置并保持方位。

在 iOS 中,如需在后台继续接收位置和方位的位置更新,请实现道路贴靠并将 allowsBackgroundLocationUpdates 设置为 YES

是。创建或更改路线时,RouteChangeListener 会提供多段线。

不需要,Navigation SDK 不要求在设备上安装 Google Maps Mobile。
不可以,Navigation SDK 目前不提供此功能。
可以。默认情况下,系统会提供并显示路况方向。

问题

在 Xcode 12 中,无法针对模拟器正确构建应用。如何解决此问题?

如需解决此问题,请打开您的 Xcode 项目对应的“Build Settings”,然后将 arm64 添加到 Excluded Architectures(仅适用于“iOS 模拟器”build)。

如需了解详情,请查看下面的 StackOverflow 会话

无法加载 GMSMapView。

如果 GMSMapView 未加载:

  • 检查是否已在 Cloud 控制台中启用 NavSDK。
  • 如果 Nav SDK 已安装,但您的项目未使用 Nav SDK API,请将其从二进制文件中移除。

网络

Navigation SDK 如何处理连接不佳的问题?
Navigation SDK 会为每个行程预缓存路线。预缓存的信息包括 15-20 分钟的路线信息,以及司机偏离路线时的备选路线信息。Navigation SDK 使用设备 GPS 和传感器估算位置。
是否有可用的离线模式?
不可以,Navigation SDK 目前不提供离线模式;不过,该 SDK 确实为行程提供预缓存的信息。

数据

我是否可以在开始路线之前检索行程中的所有经停点/目的地?

是。在 Android 中,如需检索路线的路线,请调用 Navigator.getRouteSegments()

在 iOS 中,调用 GMSNavigator.routeLegs(read)

路线的起点是否提供精细路线导航?
可以。Navigation SDK 提供了路线段列表。此外,驾驶员还可以滑动浏览标题中的路线卡片,查看每项操作。
如何向应用用户传达预计到达时间?

在 Android 应用中,请按照以下步骤向应用用户提供预计到达时间:

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有航点的时间和距离。
  2. 像目前为司机预计到达时间那样将此信息转发到客户端应用。

在 iOS 应用中,请按照以下步骤向应用用户提供预计到达时间:

  1. 使用 Navigator.getRouteSegments() 检索行程中的路程。
  2. 为每个旅程路段调用 GMSNavigator.timeToNextDestination
  3. 按照目前针对驾驶员预计到达时间的操作将时间信息转发到客户端应用。
如果导航不在前台运行,是否可以使用 RoadSnappedLocationProvider 获取驾驶员当前的贴靠位置?

是。在 Android 中,RoadSnappedLocationProvider 默认在后台运行。

在 iOS 中,如需让导航在后台运行,请实现 GMSRoadSnappedLocationProviderListener 监听器,并将 allowsBackgroundLocationUpdates 属性设置为 TRUE

Navigation SDK 是否支持地理围栏?

不可以。在导航时,remainingTimeOrdistanceChangeListener 比使用简单地理围栏具有优势。地理围栏可能不会考虑道路几何图形,也可能不以司机正在导航的确切点为中心。

您可以使用 remainingTimeOrdistanceChangeListener 大致实现此功能。

  1. 设置阈值以确定回调的频率。
  2. 查看到目的地的剩余距离。

例如,如果将阈值设置为 100 米,则当到目的地的距离变化 100 米时,您会收到回调。随着距离的缩短,您可以将此阈值更新为较小的值,并接收更频繁的回调。然后,检查剩余距离,以确定您是否距离上车点/下车点足够近。

在 iOS 中,实现监听器 GMSNavigatorListener.didUpdateRemainingDistance 以管理通知之间的距离。

我可以停用导航应用在后台运行时的通知吗?

是。在 Android 中,使用 Navigator.setHeadsUpNotificationEnabled 控制通知。此方法具有布尔值参数。FALSE 停用通知;TRUE 启用通知。

在 iOS 中,通过将 GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates 设置为 NO,对道路贴靠位置停用后台通知。

如需为其他位置通知停用后台处理,请调用 GMSNavigator.sendsBackgroundNotifications(NO)

界面自定义

我可以用颜色标识最佳路线选项吗?
不可以。目前不支持对特定路线选项进行颜色编码。
Navigation SDK 能否显示最终目的地的预计到达时间?

是。在 Android 中,请使用以下方法:

  1. 使用 Navigator.getTimeAndDistanceList() 检索所有航点的时间和距离。
  2. 使用 NavigationFragment.setEtaCardEnabled(false) 隐藏当前航点的预计到达时间。
  3. 渲染最终到达目的地的预计到达时间。

在 iOS 中,请使用以下代码:

  1. 调用 GMSNavigator.routeLegs(read)
  2. 在最后一段路程中,调用 GMSNavigator.timeToNextDestination
  3. 使用 MSMapView.settings.navigationFooterEnabled=NO 到 FALSE 隐藏当前航点的预计到达时间。
  4. 渲染最终到达目的地的预计到达时间。
如何隐藏预计到达时间更新?

您可以通过以下方法停用预计到达时间卡片:

  • 在 Android 中,使用 navigationView.setEtaCardEnabled(false)
  • 在 iOS 中,使用 GMSMapView.settings.navigationFooterEnabled=NO
页眉和页脚卡片支持哪些界面自定义?

在 Android 中,您可以使用 StylingOptions 来设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用 NavigationFragmentsetHeaderEnabledsetFooterEnabled 成员函数。

在 iOS 中,使用 GMSMapView.settings.navigationHeaderPrimaryBackgroundColor 设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用 GMSUISettingsnavigationFooterEnablednavigationHeaderEnabled 属性。

路由

我可以为司机提供具体路线或移除备选路线吗?
否。默认情况下,系统会提供多条路由,并且优先路由最快的路由。 您可以在请求中添加“避开高速公路和收费站”等偏好设置来影响默认路线。添加航点也会影响路线。
我可以向应用用户显示与默认目标位置不同的目的地标签吗?

是。在 Android 中,创建一个 Marker,其中包含目的地的自定义标题和纬度/经度。Navigation SDK 会在 NavigationMap 上显示自定义标题和坐标。

在 iOS 中,您将为目的地创建并显示 GMSMarker

我可以使用 Navigation SDK 跟踪与指定路径的偏差吗?

是。在 Android 中,使用 Navigator.setRouteChangedListener 在路由发生更改或建议新路由时收到通知:

  1. 注册一个监听器,以使用 Navigator.setRouteChangedListener 方法检查设备沿路线的位置。
  2. 将代码添加到回调事件处理脚本 onRouteChanged
    • 向应用用户发送消息,提供更新后的预计到达时间和距离信息。
    • 跟踪设备的位置。
    • [可选] 添加您的应用所需的其他功能,以便在司机偏离指定路线时处理这些功能。

在 iOS 中,使用 GMSNavigator 及其监听器在路由发生更改或推荐新路由时接收通知:

  1. 在地图的视图控制器上,实现 GMSNavigatorListener 协议和 GMSRoadSnappedLocationProviderListener 协议。
  2. 实现 GMSNavigatorListener.navigatorDidChangeRoute
  3. 使用 GMSNavigatorrouteLegscurrentRouteLeg 属性访问新路线。
司机可以在没有完成路线的情况下退出导航吗?

是。在 Android 中,调用 Navigator.stopGuidance() 方法来停止导航。

在 iOS 中,调用 GMSNavigator.clearDestinations

模拟器

模拟器是否支持路线更改?

是。在 Android 中,调用 simulateLocationsAlongNewRoute 以模拟包含路线变更的行程。simulateLocationsAlongExistingRoute 方法会忽略对现有路由的更改。

在 iOS 中,使用 GMSLocationSimulator.simulateAlongNewRouteToDestinations 来模拟包含路线变更的旅程。如果您预计不会有任何路由更改,可以使用 GMSLocationSimulator.simulateLocationsAlongExistingRouteGMSLocationSimulator.simulateAlongNewRouteToDestinations

工作流

关闭包含导航 fragment 的 activity 后,如何关闭通知?

当 activity 关闭时,导航通知在导航期间保持可见。当车辆到达目的地时,导航会停止,并且通知会消失。

如需处理对通知的点击,请使用 Navigator.startGuidance(intent resumeIntent)resume intent 在应用用户点击通知时触发。通常,Navigator.startguidance(getIntent()) 是从主 activity 调用的,主 activity 会在应用用户点击通知时调用该 activity。