常见问题解答
产品详情
- Navigation SDK 服务条款通知应如何显示?
- 语音指示支持哪些语言?
- 当驾驶员退出导航模式时,航向是否会保持不变?
- 在开始或更改路线时,可以使用多段线吗?
- 应用用户是否需要安装 Google 地图移动版?
- Navigation SDK 能否识别餐厅和其他目的地附近的停车场?
- Navigation SDK 在接近转弯点时是否会显示车道的车流方向?
问题
网络
数据
- 我可以在开始路线之前检索行程中的所有经停点/目的地吗?
- 在路线开始时是否提供精细路线指引?
- 如何向应用用户传达预计到达时间 (ETA)?
- 如果导航应用不在前台运行,能否使用
RoadSnappedLocationProvider
获取驾驶员的当前贴靠位置? - Navigation SDK 是否支持地理围栏?
- 我可以在导航应用在后台运行时停用通知吗?
界面自定义
路由
- 我可以向司机提供特定路线或移除备选路线吗?
- 我可以向司机显示与默认目的地位置不同的目的地标签吗?
- 我可以使用 Navigation SDK 跟踪与定义的路径的偏差吗?
- 司机可以在未完成路线的情况下退出导航吗?
模拟器
Workflows
Mobility 服务
- 移动出行服务客户使用 Navigation SDK 的方式有何不同?
- 如何判断我是否为移动出行服务客户?
- Mobility Services 客户如何为 Navigation SDK 付费?
- 哪些 Navigation SDK API 仅供 Mobility Services 客户使用?
- 如果我是 Mobility Services 客户,还可以使用 Navigation SDK 的非 Mobility Services 实现吗?
产品详情
- 您的应用必须实现一个包含 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 会话。
- 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 中,请按照以下步骤向应用用户提供 ETA 信息:
- 使用
Navigator.getTimeAndDistanceList()
检索所有航点的时间和距离。 - 将此信息转发给客户端应用,就像您目前为司机预计到达时间所做的那样。
在 iOS 中,请按以下步骤向应用用户提供预计到达时间 (ETA) 信息:
- 使用
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)
隐藏当前航点的预计到达时间。 - 渲染最终目的地的预计到达时间 (ETA)。
在 iOS 中,请使用以下命令:
- 调用
GMSNavigator.routeLegs(read)
。 - 在最后一程,调用
GMSNavigator.timeToNextDestination
。 - 将
MSMapView.settings.navigationFooterEnabled=NO
设为 FALSE 以隐藏当前航点的预计到达时间。 - 渲染最终目的地的预计到达时间 (ETA)。
- 使用
- 如何隐藏 ETA 更新?
-
您可以使用以下方法停用 ETA 卡片:
- 在 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
。
Workflows
- 如何在关闭包含导航 fragment 的 activity 后关闭通知?
-
在导航过程中,当 activity 关闭时,导航通知仍会显示。当车辆到达目的地时,导航会停止,并且通知会消失。
如需处理通知点击,请使用
Navigator.startGuidance(intent resumeIntent)
。 当应用用户点击通知时,系统会触发resume intent
。 通常,Navigator.startguidance(getIntent())
是从主 activity 调用的,该 activity 会在应用用户点击通知时重新调用。
Mobility 服务
Google Maps Platform 出行服务提供了一系列 API 和 SDK,可帮助满足交通运输和物流企业的企业需求。对于移动出行服务客户,导航 SDK 通常与相关服务搭配使用,用于路线优化、调度、任务跟踪、车队分析等。对于移动出行服务客户,Navigation SDK 的结算方式也不同。如需了解详情,请参阅移动服务文档。
移动产品目前仅面向部分客户提供。如需了解详情,请与您的销售代表联系。
ReportBillableEvent
调用。只有移动出行服务客户应调用 ReportBillableEvent
方法。
Navigation SDK 中有一些 API 仅供移动出行服务客户使用,Google 会按交易向这些客户收费。如果您不是移动流量服务客户,则以下方法无效:
可以。Mobility Services 客户可以同时使用 Navigation SDK 的 Mobility Services 和非 Mobility Services 实现。不过,您一次只能在应用中使用一种实现类型。您还需要创建一个新的 Google Cloud 项目、结算账号和 API 密钥,这些项目、账号和密钥应与您在实现移动出行服务时使用的项目、账号和密钥分开。如需了解详情,请参阅 Navigation SDK 设置概览。
如需详细了解如何使用 Navigation SDK 的非 Mobility Services 实现(包括将应用从一种实现类型迁移到另一种实现类型),请与您的 Google 客户代表联系。
注意:如果您目前不是 Mobility Services 客户,但有兴趣详细了解 Mobility Services 集合中的 API 和 SDK,请与 Google Maps Platform 销售团队联系。