常见问题解答
产品介绍
- Navigation SDK 服务条款通知应如何显示?
- 语音导航支持哪些语言?
- 驾驶员退出导航模式后,方向是否保持不变?
- 开始或更改路线时,可以使用多段线吗?
- 应用用户是否需要安装移动版 Google 地图?
- Navigation SDK 能否识别餐馆和其他目的地附近的停车场?
- Navigation SDK 在接近转弯点时是否会显示车道的行驶方向?
问题
网络
数据
- 我可以在开始路线之前检索行程中的所有停靠点/目的地吗?
- 路线起点是否提供精细路线导航?
- 如何将预计到达时间 (ETA) 告知应用用户?
- 如果导航功能不在前台,能否使用
RoadSnappedLocationProvider
获取驾驶员当前的贴靠位置? - Navigation SDK 是否支持地理围栏?
- 我可以停用导航应用在后台运行时的通知吗?
界面自定义
路线
- 我可以提供发给司机的具体路线或移除备选路线吗?
- 我可以向驾驶员显示与默认目的地不同的目的地标签吗?
- 我能否使用 Navigation SDK 跟踪与已定义路径的偏差?
- 驾驶员能否在不完成路线的情况下退出导航?
模拟器
工作流
产品介绍
- 您的应用必须实现一个对话框,其中包含每个驱动程序都必须接受的 Navigation SDK 服务条款通知。此对话框让驾驶员有机会同意服务条款。Navigation SDK 会提供一个包含术语的文本文件。
- 在 Android 中,使用
NavigationApi.showTermsAndConditionsDialog
方法显示包含这些术语的对话框。 - 在 iOS 中,调用
GMSNavigationServices.showTermsAndConditionsDialogIfNeededWithCompanyName
。 - Google 地图移动版支持的任何语言都会自动支持 Navigation SDK。设备具有默认的系统语言,而应用无法更改该设置;不过,该应用可以访问 70 多种语言。
-
可以。在 Android 中,
LocationListener
一旦启动就会继续在后台运行。您的应用会继续对相应位置进行道路贴靠,并保持方向角。在 iOS 中,如需继续在后台接收位置和方位的位置信息更新,请实现道路贴靠并将
allowsBackgroundLocationUpdates
设置为YES
。 -
可以。创建或更改路线时,
RouteChangeListener
会提供多段线。 - 不需要,Navigation SDK 不需要在设备上安装 Google 地图移动版。
- 不能,Navigation SDK 目前不提供此功能。
- 可以。默认情况下,流量方向可用并显示。
问题
- 在 Xcode 12 中,无法针对模拟器正确构建应用。如何解决此问题?
-
如需解决此问题,请打开您的 Xcode 项目对应的“Build Settings”,然后将
arm64
添加到Excluded Architectures
(仅适用于“iOS 模拟器”build)。如需了解详情,请查看下面的 StackOverflow 会话。
网络
- Navigation SDK 如何处理网络连接不佳的情况?
- Navigation SDK 会为每个行程预缓存路线。预缓存的信息包括 15-20 分钟的路线信息,以及驾驶员偏离路线时的备选路线信息。Navigation SDK 使用设备 GPS 和传感器来确定大致位置。
- 是否提供离线模式?
- 不能,Navigation SDK 目前不提供离线模式;但是,SDK 会为行程提供预缓存的信息。
数据
- 我能否在开始路线之前检索行程中的所有停靠站/目的地?
-
可以。在 Android 中,如需检索路线的路线,请调用
Navigator.getRouteSegments()
。在 iOS 中,调用
GMSNavigator.routeLegs(read)
。 - 在路线起点是否提供精细路线导航?
- 可以。Navigation SDK 提供了路线段列表。此外,驾驶员可以滑动浏览标题中的路线卡片,查看每种操作。
- 如何向应用用户传达预计到达时间?
-
在 Android 中,请按照以下步骤向应用用户提供预计到达时间信息:
- 使用
Navigator.getTimeAndDistanceList()
检索所有航点的时间和距离。 - 将此信息转发到客户端应用,就像您当前针对驱动程序 ETA 所做的那样。
在 iOS 中,请按照以下步骤向应用用户提供预计到达时间信息:
- 使用
Navigator.getRouteSegments()
检索行程中的路程。 - 为每个行程路程调用
GMSNavigator.timeToNextDestination
。 - 按照您当前为驱动程序预计到达时间而将时间信息转发到客户端应用。
- 使用
-
如果导航元素不在前台,能否使用
RoadSnappedLocationProvider
获取驾驶员当前的贴靠位置? -
可以。在 Android 中,
RoadSnappedLocationProvider
默认在后台运行。在 iOS 中,如需让导航在后台保持运行,请实现
GMSRoadSnappedLocationProviderListener
的监听器,并将allowsBackgroundLocationUpdates
属性设置为TRUE
。 - Navigation SDK 是否支持地理围栏?
-
否。在导航环境中,与简单的地理围栏相比,
remainingTimeOrdistanceChangeListener
具有优势。地理围栏可能不会考虑道路几何图形,并且可能不会以驾驶员导航到的确切点为中心。您可以使用
remainingTimeOrdistanceChangeListener
近似实现此功能。- 设置阈值以确定回调的频率。
- 查看到目的地的剩余距离。
例如,如果您将阈值设置为 100 米,那么当与目的地的距离发生变化 100 米时,您会收到回调。随着距离的减少,您可以将此阈值更新为较小的值,并接收更频繁的回调。然后,检查剩余距离,确定您是否距离上车点/下车点足够近。
在 iOS 中,实现监听器
GMSNavigatorListener.didUpdateRemainingDistance
来管理通知之间的距离。 - 我可以在导航应用在后台运行时停用通知吗?
-
可以。在 Android 中,使用
Navigator.setHeadsUpNotificationEnabled
来控制通知。此方法具有布尔值参数。FALSE
可停用通知;TRUE
可启用通知。在 iOS 中,将
GMSRoadSnappedLocationProvider.allowsBackgroundLocationUpdates
设为 NO,即可针对道路吸附位置停用后台通知。如需针对其他位置通知停用后台处理,请调用
GMSNavigator.sendsBackgroundNotifications(NO)
。
界面自定义
- 我可以用颜色标记最佳路线选项吗?
- 不可以。目前不支持对具体路线选项进行颜色编码。
- Navigation SDK 能否显示最终目的地的预计到达时间?
-
可以。在 Android 中,请使用以下方法:
- 使用
Navigator.getTimeAndDistanceList()
检索所有航点的时间和距离。 - 使用
NavigationFragment.setEtaCardEnabled(false)
隐藏当前航点的预计到达时间。 - 渲染最终的目的地预计到达时间。
在 iOS 中,请使用以下代码:
- 调用
GMSNavigator.routeLegs(read)
。 - 在最后一段路程中,调用
GMSNavigator.timeToNextDestination
。 - 使用
MSMapView.settings.navigationFooterEnabled=NO
设置为 FALSE,隐藏当前航点的预计到达时间。 - 渲染最终的目的地预计到达时间。
- 使用
- 如何隐藏预计到达时间更新?
-
您可以通过以下方法停用预计到达时间卡:
- 在 Android 中,请使用
navigationView.setEtaCardEnabled(false)
。 - 在 iOS 中,请使用
GMSMapView.settings.navigationFooterEnabled=NO
。
- 在 Android 中,请使用
-
在 Android 中,您可以使用
StylingOptions
设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用NavigationFragment
的setHeaderEnabled
和setFooterEnabled
成员函数。在 iOS 中,使用
GMSMapView.settings.navigationHeaderPrimaryBackgroundColor
设置背景颜色样式。如需隐藏或显示页眉和页脚,请使用GMSUISettings
的navigationFooterEnabled
和navigationHeaderEnabled
属性。
路线
- 我可以提供发给司机的具体路线或移除备选路线吗?
- 不需要。默认情况下,系统会提供多个路由,最快的路由具有优先级。 您可以通过在请求中添加“避开高速公路和收费站”等偏好设置来影响默认路线。添加航点也会影响路线。
- 我可以为应用用户显示与默认目的地不同的目的地标签吗?
-
可以。在 Android 中,创建一个包含目的地的自定义标题和纬度/经度的
Marker
。Navigation SDK 会在NavigationMap
上显示自定义标题和坐标。在 iOS 中,您将为目的地创建并显示
GMSMarker
。 - 我能否使用 Navigation SDK 跟踪与所定义路径的偏差?
-
可以。在 Android 中,使用
Navigator.setRouteChangedListener
在路由发生更改或建议新路由时接收通知:- 使用
Navigator.setRouteChangedListener
方法注册一个监听器,用于检查设备沿路线的位置。 - 将代码添加到回调事件处理脚本
onRouteChanged
中:- 向应用用户发送包含更新后的预计到达时间和距离信息的消息。
- 跟踪设备的位置信息。
- [可选] 添加您的应用所需的其他功能,以处理驾驶员偏离指定路线的情况。
在 iOS 中,使用
GMSNavigator
及其监听器在路由更改或建议新路由时接收通知:- 在地图的视图控制器上,实现
GMSNavigatorListener
协议和GMSRoadSnappedLocationProviderListener
协议。 - 实现
GMSNavigatorListener.navigatorDidChangeRoute
。 - 使用
GMSNavigator
的routeLegs
和currentRouteLeg
属性访问新路线。
- 使用
-
可以。在 Android 中,调用
Navigator.stopGuidance()
方法可停止导航。在 iOS 中,调用
GMSNavigator.clearDestinations
。
模拟器
- 模拟器是否支持路线更改?
-
可以。在 Android 中,调用
simulateLocationsAlongNewRoute
来模拟包含路线更改的行程。simulateLocationsAlongExistingRoute
方法会忽略对现有路由的更改。在 iOS 中,使用
GMSLocationSimulator.simulateAlongNewRouteToDestinations
来模拟包含路线更改的行程。如果您预计不会发生任何路由更改,可以使用GMSLocationSimulator.simulateLocationsAlongExistingRoute
或GMSLocationSimulator.simulateAlongNewRouteToDestinations
。
工作流
- 如何在关闭包含导航 fragment 的 activity 后关闭通知?
-
在导航期间,当 activity 关闭时,导航通知仍然可见。当车辆到达目的地时,导航会停止,并且通知会消失。
如需处理通知的点击操作,请使用
Navigator.startGuidance(intent resumeIntent)
。当应用用户点击通知时,就会触发resume intent
。通常,系统会从主 Activity 调用Navigator.startguidance(getIntent())
,主 Activity 会在应用用户点击通知时重新调用该 Activity。