此更新日志详细介绍了 Navigation SDK for Android 各个版本中的新功能和 bug 修复。
2021 年 10 月 18 日 - 冻结对 API 级别 23、24 和 25 的支持
为了应对内部依赖项的变化,从 2022 年第三季度开始,新版导航和驱动程序 SDK for Android 将不再支持 Android API 级别 23、24 和 25(Android 6、7.0 和 7.1)。
2022 年第三季度发布的适用于 Android 版本的 Navigation SDK 和驱动程序 SDK 将仅支持搭载 Android API 级别 26 或更高级别的设备。
使用 v4.x 或更低版本的适用于 Android 的 Navigation SDK 和驱动程序 SDK 构建的应用版本将继续在搭载 Android API 级别 25 及更低版本的设备上使用。
弃用公告(2021 年 6 月 21 日)
本公告介绍了自上述日期起弃用 Navigation SDK for Android 和 Android Driver SDK for Android。此通知还以重要服务通告 (MSA) 的形式发送给受影响的客户。
弃用 Navigation SDK for Android 和 Driver SDK for Android v1.x
Nav/Driver SDK v1 是在 2018 年发布的,v3 版本很快就会发布,因此是时候弃用 v1,以免无法持续支持许多主要版本。
我们不必支持这个额外的版本,从而节省了时间,让我们能够更好地支持最新的主要版本,并构建更多对客户重要的功能。
因此,Nav/Driver SDK v1.x 现已废弃,2022 年 6 月 21 日之后将不再进行维护。
请花点时间了解 SDK 版本弃用机制。
如需详细了解 Android 弃用方面的信息,请参阅 Navigation SDK for Android v2/v3 版本说明。
版本 1.51.1(2022 年 4 月 1 日)
稳定性和 bug 修复
修正了“服务条款”对话框中损坏的超链接。
当 Android activity 被销毁时,某些客户端会收到服务条款对话框错误。现在,当 activity 被销毁时,客户端不会再遇到此对话框错误。
版本 1.51(2022 年 1 月 18 日)
API 变更
将 Navigation SDK 的最低 Android API 级别提高到 23,将目标 API 级别提高到 30。此目标版本符合 Google Play 要求。
将沿着导航 V 形轨迹的多段线渲染为“灰色”,表示用户已行驶过路线的相应路段。
版本 1.50(2021 年 11 月 3 日)
- 版本 1.22 的 Jetified 变体。除了使用 AndroidX 库之外,没有做出任何更改。
版本 1.22(2021 年 10 月 7 日)
稳定性和 bug 修复
- 修复了在调用 stopNavigation 后相机停止跟踪用户位置的相机 bug。
- 修复了相机 bug,即在背景中切换应用后显示“重新居中”按钮。
- 修复了潜在的内存泄漏问题。
- 修复了导致 ANR 问题的 bug。
- 防止因服务条款对话框导致崩溃。
弃用
- 弃用了带有路线令牌的 #setDestinations ,改为使用使用 CustomRoutesOptions 的新 API。
新功能
- 添加了辅助自提功能,该功能会向导航页脚界面添加新图标。
- 为自定义路线添加了双轮机动车支持。
版本 1.21.1(2021 年 7 月 13 日)
稳定性和 bug 修复
- 修复了与实现代码中的前提条件检查过于严格的条件关联的
IllegalStateException
。 - 修复了
NavigationView.onDestroy()
中的NullPointerException
。
版本 1.21(2021 年 6 月 23 日)
API 变更
- 无头导航现在支持加速监听器。这样一来,您无需先从 Navigation SDK 呈现
View
或Fragment
,即可监控速度。
稳定性和 bug 修复
- 提高了首次安装应用时在夜间模式下加载地图图块的稳健性。
弃用
以下方法已废弃,取而代之的是 Navigator.setSpeedAlertOptions()
:
NavigationView.setSpeedAlertOptions()
SupportNavigationFragment.setSpeedAlertOptions()
NavigationFragment.setSpeedAlertOptions()
版本 1.20.1(2021 年 7 月 14 日)
稳定性和 bug 修复
- 修复了与实现代码中的前提条件检查过于严格的条件关联的
IllegalStateException
。 - 修复了
NavigationView.onDestroy()
中的NullPointerException
。
版本 1.20(2021 年 3 月 9 日)
- 添加了新的强制性依赖项。将以下依赖项添加到您的 Gradle 依赖项列表中,以避免运行时崩溃:
api 'joda-time:joda-time:2.9.9'
。
稳定性和 bug 修复
- 修复了使用 Joda-Time 的 Navigation SDK 使用者与封装到库中的 jodatime 的混淆版本冲突的问题。
- 修复了以下问题:在启动导航会话时,Navigation SDK 会意外隐藏不归其所有的消费者应用通知。
版本 1.19(2020 年 12 月 15 日)
API 变更
DriverSDK 现在会始终将路况数据发送到 FleetEngine。以前,此行为由
UpdateVehicleResponse
标志确定;现在,该标志被忽略。FleetEngine 构造函数已更改;为
AuthTokenFactory
和StatusListener
添加了封装容器。向 Navigator API 添加了两个新方法,以允许为新导航会话设置和移除监听器。
向 Navigator API 添加了一个新方法,以获取当前导航会话的事务 ID。当新的导航会话启动,以及进行中的导航会话中的交易 ID 发生更改时(例如,行程片段列表更新时),应使用此 API。
版本 1.18(2020 年 10 月 9 日)
添加了
setAbnormalTerminationReportingEnabled(boolean)
方法。此方法允许用户停用崩溃检测监控。修复了无法从
onLocationChange
事件取消注册LocationListeners
的 bug。修复了无法实例化
io.grpc.util.SecretRoundRobinLoadBalancerProvider$Provider
的 gRPC 崩溃问题。
版本 1.17(2020 年 8 月 27 日)
您现在可以将路线令牌传递给 NavSDK,以检索由该路线令牌表示的路线。当您调用 Routes Preferred API 时,路线令牌会与路线响应相关联。新 API 为
Navigator#setDestination(List<Waypoint> destinations, String routeToken)
。添加了一些新的必需依赖项。将以下依赖项添加到您的 Gradle 依赖项列表中,以避免运行时崩溃:
api 'com.google.android.datatransport:transport-api:2.2.0' api 'com.google.android.datatransport:transport-backend-cct:2.2.0' api 'com.google.android.datatransport:transport-runtime:2.2.0'
版本 1.16(2020 年 8 月 10 日)
新功能
添加了
Waypoint.Builder.setVehicleStopover
API,当在无法停靠的地方设置航点时,该 API 可以启用/停用自动重新定位路线中停靠点的功能。向
SpeedAlert
回调添加了参数SpeedAlertSeverity
。将此参数与SpeedingListener
一起使用。
稳定性和 bug 修复
废弃了
NavigationApi.cleanUp
方法,以免出现不必要的副作用(例如导致崩溃的NullPointerExceptions
)。废弃了
Waypoint.fromLatLng()
和Waypoint.fromPlaceId()
,取而代之的是Waypoint.builder()
。废弃了
NavigationTransactionRecorder
中包含的AddressListener
类,因为它未使用。
版本 1.15(2020 年 3 月 23 日)
新功能
用于导航标题的自定义字体/颜色/图标。
支持在导航标题界面中自定义推荐车道的颜色。
更新了多个 API,以遵循用于设置回调/监听器的添加和移除模式。以前的
set*
方法已标记为已废弃,并将在未来的版本中移除。下面列出了已废弃的方法:SupportNavigationFragment.setOnNightModeChangedListener
SupportNavigationFragment.setOnRecenterButtonClickedListener
NavigationFragment.setOnNightModeChangedListener
NavigationFragment.setOnRecenterButtonClickedListener
NavigationView.setOnNightModeChangedListener
NavigationView.setOnRecenterButtonClickedListener
Navigator.setArrivalListener
Navigator.setRouteChangedListener
Navigator.setRemainingTimeOrDistanceChangedListener
稳定性和 bug 修复
将 navsdk 的 minSdkVersion 提升到 19。
修复了在服务器端反向地理编码失败时不遵循纬度/经度航点名称的 bug。
版本 1.14(2020 年 2 月 2 日)
新功能
(Beta 版)运营商可以在路线请求中设置路线的目标距离,从而影响驾驶员选择哪个路线选项。此功能目前处于 Beta 版阶段,如果您有兴趣,请与您的客户工程代表联系以了解详情。
编译最高为 API 29 的 SDK。
稳定性和 bug 修复
修复了服务条款对话框中的问题,该 bug 曾阻止驱动程序必须显示“接受”提示。
修改了 NDK 组件中的异常处理行为,以避免发生崩溃情况。
版本 1.13(2019 年 11 月 8 日)
新功能
现在,驾驶员在超速时会收到限速提醒。您可以自定义速度提醒图标的外观。如 Google 地图企业版服务条款中详述,Google 对任何功能的质量(包括速度提醒功能的准确性)不做任何保证。速度提醒仅供参考。
添加了新的路由选项 (
RoutingOptions
),可让您在路线预览期间显示备用路线。添加了新的相机透视图,可显示路线的俯视图,其中路线朝向,使车辆始终面向前方。您可以通过调用
NavFragment.getCamera().followMyLocation(Camera.Perspective.TOP_DOWN_HEADING_UP)
配置此透视图。添加了一个新 API(
RoadSnappedLocationProvider
中的resetFreeNav()
),每当您停止接收已注册的监听器的位置更新且导航未处于活动状态时,您都可以调用该 API 来重置 Free Nav 服务。
稳定性和 bug 修复
- 更新了服务条款对话框的内容。
版本 1.12(2019 年 10 月 7 日)
新功能
现在,您可以在导航期间隐藏和显示一条或所有备选路线。
您现在可以在请求中指定路由策略(更短/最快的路由)。
添加了完全自定义“条款及条件”对话框(文字大小、颜色等)的功能。
稳定性和 bug 修复
修复了
com.google.http-client
中的重复类问题。将演示版应用更新为使用新的 Places SDK,并优化了演示版应用。
改进了行程概览中的相机帧速率。
版本 1.11(2019 年 6 月 28 日)
性能改进
setDestination
网络延迟已得到改善。
bug 修复
修复了在多个航点导航时与
onArrival
回调不一致的问题。修复了以下问题:对于不在当前位置附近的航点,可能会提前触发到达。
java.lang.IllegalStateException
- 对
NavigationView.onDestroy
的调用无法跟踪对NavigationView.onCreate
的调用。
- 对
其他
开源软件许可更新。
移除了路线上的预计到达时间标注,以移除冗余数据并简化界面。
版本 1.10.2(2019 年 4 月 11 日)
稳定性和 bug 修复
- 修复了可能导致在 Fragment 生命周期转换期间抛出 IllegalStateException 的错误:从 onCreate() 到 onDestroy()。
版本 1.10(2019 年 4 月 11 日)
功能
可自定义的条款及条件对话框标题:您可以使用
showTermsAndConditionsDialog
自定义“条款及条件”对话框的标题文本。航点标记:从航点标记中移除了字母数字字符。
版本 1.9(2019 年 2 月 11 日)
功能
次要标题 您可以使用自定义控件功能在导航标题下方添加自定义内容。请参阅
setCustomControl
方法的SECONDARY_HEADER
位置。新依赖项:为 Cronet 和 Glide 添加依赖项。如需了解详情,请参阅“项目配置”主题中的更新 Gradle build 脚本。
已知问题
- 如果演示版应用崩溃并出现 java.lang.ClassNotFoundException: Didn't find class "com.example.navigationapidemo.SplashScreenActivity",您需要将 Gradle 构建工具的依赖项更新为 3.3.1 或更高版本。在
build.gradle
文件中,验证buildscript
是否与以下示例匹配:
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
}
}
版本 1.8.1(2019 年 1 月 22 日)
稳定性和问题修复
- 修复了在某些相机模式下出租车模式崩溃的问题。
- 在稳定性方面进行了多项改进。
版本 1.8(2018 年 12 月 21 日)
功能
出租车模式 - Beta 版:您的应用可以使用出租车专用车道和街道,为标识为出租车的车辆提供路线和预计到达时间 (ETA)。
目前支持以下地理区域:
- 巴西:里约热内卢
- 英格兰:伯明翰、考文垂、伦敦都市圈、曼彻斯特
- 以色列:特拉维夫
- 爱尔兰:都柏林
- 俄罗斯:莫斯科
- 苏格兰:格拉斯哥、爱丁堡
- 西班牙:马德里、巴塞罗那
稳定性和问题修复
- 修复了内存泄漏的问题
- 性能改进
版本 1.7.3(2018 年 9 月 18 日)
bug 修复
NavigationView
现在可以直接从onStart
转换为onStop
,这样将不再生成IllegalStateException
。
版本 1.7.2(2018 年 8 月 16 日)
功能
- 您现在可以在导航期间显示路线列表,以显示即将到来的行程转弯口。路线列表通过
DirectionsListView
提供。 - 现在,您可以通过
getSeverity
方法使用TimeAndDistance
类来检索路况状态。 - 现已支持车牌限制。
bug 修复
- 修复了服务条款对话框(显示为
IllegalStateException
)中偶尔出现的崩溃问题。 - 修复了带有“尝试对 null 对象引用写入到字段...”等消息的 NullPointerException 错误。
- R.txt 中的资源标识符(以前为 0x1)现在具有正确的值。
版本 1.6.2(2018 年 7 月 16 日)
bug 修复
- 修复了
AccessibilityStateUtils.getAccessibilityState()
中的 NullPointerException。
版本 1.6.0(2018 年 5 月 10 日)
bug 修复
- 修复了导致行程路程和备选路线中的预计到达时间标注不正确的 bug。
- 修复了位置的纬度和/或经度值为
null
时的 NullPointerException。 - 修复了在离线状态下接受服务条款对话框时无法加载地图的错误。
- 针对会导致 Navigation SDK 中出现 NPE 的 Android OS 7.0 LocationManager bug 引入了解决方法。
版本 1.5.0(2018 年 3 月 26 日)
功能
- 夜间模式:您现在可以将导航设置为使用夜间模式主题。您可以通过程序化方式启用或停用夜间模式,也可以让 Navigation SDK 根据一天中的时段自动切换主题。
- 双轮机动车出行方式(Beta 版):您现在可以将出行方式设置为
TWO-WHEELER
,以获取摩托车和滑板车路线。此功能目前仅在印度和印度尼西亚推出。 - 速度限制:您现在可以以编程方式显示或隐藏速度限制图标(此图标仅在具有可靠速度限制数据的位置显示)。
- 自定义地图叠加层控件:您可以使用自定义地图叠加层控件在导航时动态定位界面元素。
getNavigator()
调用现在接受应用上下文,以便可以从服务调用它。
bug 修复
- 解决了服务条款对话框中的几个文本布局问题,以改进从右到左语言的显示。
版本 1.3.4(2018 年 1 月 24 日)
- 修复了导致
clearDestinations
有时无法清除上一个路线的 bug
版本 1.3.3(2017 年 12 月 18 日)
- 使
CameraArbitrator
类具有线程安全性,因为它同时用于界面线程和渲染线程; - 如果
CompassButtonController
的事件在调用onDestroy()
后到达,则不抛出 NPE; - 为 NavigationApi 的公共方法添加了 null 检查。SDK 将抛出最靠近开发者代码的 NPE。
版本 1.3.2(2017 年 11 月 30 日)
- 修复了发生网络连接错误时崩溃的问题。
版本 1.3.1(2017 年 11 月 14 日)
- 修复了 Android 8.0 Oreo(API 级别 26)及更高版本上的弹出式精细导航通知。
- 修复了在创建
NavigationView
或NavigationFragment
之前请求路线不可见的问题。
版本 1.3(2017 年 11 月 7 日)
- 向
NavigationView
添加了onTrimMemory()
方法。此方法应由包含的 activity 调用。 - 现在,如果在指定超时时间内找不到位置信息修复,
Navigator.setDestinations()
将返回LOCATION_UNKNOWN
状态。可以使用RoutingOptions.locationTimeoutMs()
设置超时时间。 - 现在可以使用
MarkerOptions.anchor()
设置自定义标记图片的定位点。 NavigationMap
现在公开了一个Projection
对象,该对象可用于在将内边距考虑在内后获取地图的可见纬度/经度边界。- 现在可以使用
Navigator.setHeadsUpNotificationEnabled()
停用弹出式精细导航通知。 - 现在,“重新居中”按钮会在点击时提供一个监听器。对
NavigationView
、NavigationFragment
和SupportNavigationFragment
使用setOnRecenterButtonClickedListener()
方法可设置该属性。
版本 1.2.6(2017 年 10 月 25 日)
- 修复了在操作系统自动重新创建导航服务时可能会发生的 NullPointerException。
- 如果以错误的顺序调用某些生命周期方法(例如连续调用
onStart()
或onResume()
),NavigationView
不再抛出异常。而是会记录一条警告消息。
版本 1.2.5(2017 年 10 月 19 日)
- 添加了一些更好的功能块缓存管理,以控制内存用量。
- 修复了在创建
NavigationView
或NavigationFragment
之前调用Navigator.setDestinations()
时可能会发生崩溃的问题。
版本 1.2.4(2017 年 10 月 11 日)
- 修复了在没有导航器的情况下创建多个 NavigationView 时可能发生的内存泄漏问题。
版本 1.2.3(2017 年 10 月 4 日)
- 修复了有时导致“我的位置”标记消失的生命周期 bug。
- 修复了上车点和下车点事件可能会丢失的其他问题。
版本 1.2.2(2017 年 9 月 27 日)
- 缩短了延迟时间,以加快 API 初始化和
Navigator.setDestinations
调用的速度。
版本 1.2.1(2017 年 9 月 20 日)
- 向库清单添加了
android:largeHeap="true"
。这样可以降低 OutOfMemoryError 的频率,这是实现可靠的导航体验所必需的。 - 提高了记录上车点和下车点事件的可靠性。
版本 1.2(2017 年 9 月 1 日)
- 当设备方向未知时,地图现在会以上北下南的概览模式显示,并显示圆形的“我的位置”标记。这在用户体验之旅开始时特别有用,通过告知用户设备还不了解其面对的方式,这有助于用户确定自己的方向。
- 异常路况卡片采用了全新设计,并显示在地图底部,而不是之前的位置。
- 更新了位置信息监听功能,以确保其在 Android 8.0 Oreo(API 级别 26)中按预期运行。
- 修复了在导航模式和非导航模式下目的地标记呈现方式不同的 bug。
版本 1.1.2(2017 年 9 月 16 日)
- 提高了记录上车点和下车点事件的可靠性。
版本 1.1.1(2017 年 8 月 24 日)
- 修复了在没有网络连接的情况下重新路由时有时会发生的 IllegalStateException。
- 修复了在调用
Navigator.setDestinations()
前后地图样式设置不同的 bug。
版本 1.1(2017 年 7 月 31 日)
- 修复了当应用被发送到后台时
RoadSnappedLocationListener
有时不起作用的 bug。 - 修复了启动/停止导航时出现的相机 bug。
- 修复了
Simulator.unsetUserLocation()
中未正确重置位置信息的 bug。
版本 1.0(2017 年 7 月 5 日)
- 启动 Navigation SDK。