此更新日志详细介绍了 Navigation SDK for Android 的每个版本中的新功能和 bug 修复。
2021 年 10 月 18 日 - 冻结对 API 级别 23、24 和 25 的支持
为了应对内部依赖项的变化,从 2022 年第三季度开始,新版 Navigation SDK for Android 和驱动程序 SDK 将不再支持 Android API 级别 23、24 和 25(Android 6、7.0 和 7.1)。
从 2022 年第三季度开始发布的 Android 导航和驱动程序 SDK 将仅支持搭载 Android API 级别 26 或以上版本的设备。
使用 v4.x 或更低版本的 Android 版导航和驱动程序 SDK 构建的应用版本可继续在搭载 Android API 级别 25 及更低版本的设备上运行。
弃用公告(2021 年 6 月 21 日)
本公告介绍了自上述日期起弃用 Navigation SDK for 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,用于在无法停靠的位置设置航点时启用/停用路线中的停靠点自动重定位功能。向
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 版,如果您有兴趣,请与您的客户工程代表联系以了解详情。
编译 SDK(最高版本为 API 29)。
稳定性和 bug 修复
修复了服务条款对话框中的 bug,该 bug 导致驾驶员必须强制看到“接受”提示。
修改了 NDK 组件中的异常处理行为,以避免崩溃情况。
版本 1.13(2019 年 11 月 8 日)
新功能
现在,当驾驶员超过速度限制时,就能收到限速提醒。您可以自定义速度提醒图标的外观。如 Google Maps Enterprise 服务条款中所述,Google 对任何功能的质量(包括速度提醒功能的准确性)不作任何保证。速度提醒仅供参考。
添加了新的路线选项 (
RoutingOptions
),允许您在路线预览期间显示备选路线。添加了新的相机视角,该视角会显示路线的俯视图,其中路线朝向,以便车辆始终面向前方。您可以通过调用
NavFragment.getCamera().followMyLocation(Camera.Perspective.TOP_DOWN_HEADING_UP)
来配置此透视图。添加了一个新 API(
RoadSnappedLocationProvider
中的resetFreeNav()
),每当您停止在已注册的监听器上接收位置信息更新时(导航处于非活动状态时),您都可以调用该 API 来重置免费导航服务。
稳定性和 bug 修复
- 更新了《服务条款》对话的内容。
版本 1.12(2019 年 10 月 7 日)
新功能
现在,您可以在导航期间隐藏和显示一条或所有备选路线。
您现在可以在请求中指定路由策略(较短/最快的路由)。
添加了完全自定义“条款及条件”对话框(文字大小、颜色等)的功能。
稳定性和 bug 修复
修复了
com.google.http-client
中存在重复类的问题。更新了演示版应用以使用新的 Places SDK,并 Jetified 演示版应用。
改进了行程概览中的相机帧速率。
版本 1.11(2019 年 6 月 28 日)
性能提升
- 改善了
setDestination
的网络延迟。
bug 修复
修复了在多个航点导航时与
onArrival
回调不一致的问题。修复了以下问题:对于不在当前位置附近的航点,可能会过早触发到达。
java.lang.IllegalStateException
- 对
NavigationView.onDestroy
的调用无法跟随对NavigationView.onCreate
的调用。
- 对
其他
开源软件许可更新。
移除了路线上的路线预计到达时间宣传信息,以便移除冗余数据并简化界面。
版本 1.10.2(2019 年 4 月 11 日)
稳定性和 bug 修复
- 修复了可能导致在 fragment 生命周期转换 onCreate() 到 onDestroy() 期间抛出 IllegalStateException 的 bug。
版本 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 日)
稳定性和 bug 修复
- 修复了某些相机模式下出租车模式崩溃的问题。
- 各种稳定性改进。
版本 1.8(2018 年 12 月 21 日)
功能
出租车模式 - Beta 版:您的应用可以使用专用于出租车的车道和街道,为被标识为出租车的车辆提供路线和预计到达时间 (ETA)。
目前支持以下地理区域:
- 巴西:里约热内卢
- 英格兰:伯明翰、考文垂、伦敦都市圈、曼彻斯特
- 以色列:特拉维夫
- 爱尔兰:都柏林
- 俄罗斯:莫斯科
- 苏格兰:格拉斯哥、爱丁堡
- 西班牙:马德里、巴塞罗那
稳定性和 bug 修复
- 修复了内存泄漏的问题
- 性能改进
版本 1.7.3(2018 年 9 月 18 日)
bug 修复
NavigationView
现在可以从onStart
直接转换为onStop
,从而不会再生成IllegalStateException
。
版本 1.7.2(2018 年 8 月 16 日)
功能
- 您现在可以在导航期间显示路线列表,以显示行程即将转弯的转弯口。路线列表通过
DirectionsListView
提供。 - 现在,您可以通过
getSeverity
方法使用TimeAndDistance
类来检索流量状态。 - 现在支持车牌限制。
bug 修复
- 修复了《服务条款》对话框中(显示为
IllegalStateException
)偶尔崩溃的问题。 - 修复了显示消息“attempt to write to field ... on a 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。 - 修复了以下 bug:如果在离线状态下接受服务条款对话框,就无法加载地图。
- 针对会导致 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 日)
- 修复了有时会导致 my-location 标记消失的生命周期 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。