腾讯android 导航sdk接入文档

54
腾讯 Android 导航 SDK 接入文档 导航版本号 5.2.6 支持 Android 4.0 及以上系统 腾讯 ANDROID 导航 SDK 接入文档 ..................................................................................0 1.概述.................................................................................................................................2 1.1 路径规划...................................................................................................................2 1.2 实时导航...................................................................................................................3 1.3 模拟导航...................................................................................................................4 1.4 导航设置...................................................................................................................4 1.5 自定义导航面板........................................................................................................8 1.6 添加控件...................................................................................................................9 2.工程配置........................................................................................................................10 2.1 申请开发者秘钥......................................................................................................10 2.2 新建工程(已有可跳过) .............................................................................................11 2.3 设置腾讯地图、导航 KEY........................................................................................11 2.4 引入导航 SDK、地图 SDK、定位 SDK ..................................................................12 2.5 权限设置.................................................................................................................12 2.6 混淆配置.................................................................................................................13 3. 快速接入.......................................................................................................................14 3.1 驾车导航.................................................................................................................14 3.2 步行导航.................................................................................................................19 3.3 骑行导航.................................................................................................................22

Upload: others

Post on 30-Nov-2021

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 腾讯Android 导航SDK接入文档

腾讯 Android 导航 SDK 接入文档

导航版本号 5.2.6 支持 Android 4.0 及以上系统

腾讯 ANDROID 导航 SDK接入文档 .................................................................................. 0

1.概述 ................................................................................................................................. 2

1.1路径规划 ................................................................................................................... 2

1.2实时导航 ................................................................................................................... 3

1.3模拟导航 ................................................................................................................... 4

1.4导航设置 ................................................................................................................... 4

1.5自定义导航面板 ........................................................................................................ 8

1.6添加控件 ................................................................................................................... 9

2.工程配置 ........................................................................................................................ 10

2.1申请开发者秘钥 ...................................................................................................... 10

2.2新建工程(已有可跳过) ............................................................................................. 11

2.3设置腾讯地图、导航 KEY ........................................................................................ 11

2.4 引入导航 SDK、地图 SDK、定位 SDK .................................................................. 12

2.5权限设置 ................................................................................................................. 12

2.6混淆配置 ................................................................................................................. 13

3. 快速接入 ....................................................................................................................... 14

3.1 驾车导航 ................................................................................................................. 14

3.2 步行导航 ................................................................................................................. 19

3.3 骑行导航 ................................................................................................................. 22

Page 2: 腾讯Android 导航SDK接入文档

1

4.功能概述 ........................................................................................................................ 25

4.1 设置设备号 ............................................................................................................. 25

4.2 驾车导航 ................................................................................................................. 25

4.3 步行导航 ................................................................................................................. 40

4.4骑行导航 ................................................................................................................. 46

5.网约车场景 .................................................................................................................... 52

5.1 快车业务 ................................................................................................................. 52

Page 3: 腾讯Android 导航SDK接入文档

2

1.概述

腾讯导航 SDK 是一款针对在线导航的产品。该产品的路径计算与实时交通信息

相结合,提供路径规划、实时导航、模拟导航、导航设置、自定义导航界面等

功能,力求为用户提供更加人性化的导航服务。

Demo 地址: https://github.com/TencentLBS/TencentNaviDemo_Android

1.1路径规划

路径规划可根据起点、终点、途径点的经纬度和 PoiId(PoiId 可根据场景

需求决定是否使用)以及驾车路线的参数配置,给用户提供出行路线策略。路

径规划成功后得到一条或多条路线信息,根据路线信息可以在地图上进行位置

标注、绘制路线等操作。

途经点最多可设置十个,驾车路线的参数配置包括是否走高速、是否躲避

拥堵、是否避开收费道路、设置起点道路类型等。

起点道路类型包括在主路、在辅路、在桥上等,设置该字段可以提升路线

规划起点位置的准确程度,默认为无详细起点路段类型。

Marker(是用来表示一个点位置的可见元素),可以在地图上用默认 marker 标注

位置信息,也可以自定义图标。如 Demo 中的“起”、“终”、“经”分别标注

了路线中的起点、终点、途经点。

例:设置起点为北京动物园,途经点为北京儿童医院,终点为北京西站,

躲避拥堵和高速,起始点在主路时,路线规划效果如下图:(图中大头针颜

色、路线颜色和宽度等可根据地图 SDK 的介绍进行更改)

Page 4: 腾讯Android 导航SDK接入文档

3

1.2实时导航

实时导航是基于用户真实的定位信息来驱动的导航过程。路线规划完成

后,就可以开始实时导航。导航状态下,页面展示导航面板、车道线、路口放

大图、自车点罗盘等,开发者可设置其隐藏/显示。

导航面板包含转弯图示、下一条道路名称和剩余距离等信息。

如下图所示,车道线通过白色高亮箭头指示用户可选择的车道类型,路口

放大图能够显示道路走向,多岔路、道路具体形状、车道数量等,通过黄色高

亮线段更清晰的标明路线防止用户混淆。

自车点罗盘的自定义可参见本文档“快速入门指南”中的“自定义导航界

面”。

Page 5: 腾讯Android 导航SDK接入文档

4

1.3模拟导航

模拟导航中设置起点、终点和途经点的经纬度进行路径规划,路线规划成

功后,根据得到的路线信息,进行模拟导航。模拟导航时不获取用户的实时位

置,开发者可以用于模拟导航测试。

1.4导航设置

用户可以根据需求来设置相应的导航模式、日夜间模式、主辅路切换功

能,

具体效果如下:

2D 模式:导航时地图始终朝北,车头实时改变方向

Page 6: 腾讯Android 导航SDK接入文档

5

3D 模式:导航时车头始终朝上,地图实时旋转

全览模式:导航时地图显示导航的起点到终点的完整路线

Page 7: 腾讯Android 导航SDK接入文档

6

剩余全览模式:导航时地图显示车辆的当前位置点到终点的路线

日间模式:浅色系底图,设置该模式,则导航过程中始终为日间状态

Page 8: 腾讯Android 导航SDK接入文档

7

夜间模式:深色系底图,设置该模式,则导航过程中始终为夜间状态

自动模式:设置该模式,导航 SDK 通过对当前系统时间和经纬度的判断自

动切换到日间或夜间模式

例:2019 年 5月 9日北京日夜间模式切换的时间为:

04:57 切换为日间模式

19:25切换为夜间模式

Page 9: 腾讯Android 导航SDK接入文档

8

回弹模式:回弹模式:默认值,导航态中,用户使用手势操作地图后进入

该模式,手势结束 5秒后切换回之前的导航模式,直接设置为该模式不会被响

应。

主辅路切换:在用户进行路线规划时,通过配置起点路段类型属性能极大

地提高路线规划的准确性。其中路段类型包括:在桥上、在桥下、在主路、在

辅路、在对面、在桥下主路、在桥下辅路。当用户处于导航过程之中时,用户

也能够通过回调方法拿到当前行驶路段可切换的道路类型信息,具体方法方法

见下文。

1.5自定义导航面板

开发者可以根据需要自定义导航面板的位置、大小、内容,隐藏,等信息

Page 10: 腾讯Android 导航SDK接入文档

9

1.6添加控件

用户可对导航页面添加自己的控件

Page 11: 腾讯Android 导航SDK接入文档

10

2.工程配置

2.1申请开发者秘钥

1) 创建开发者密钥:进入网站 https://lbs.qq.com/console/key.html,

创建开发者账号。如果之前已经创建过,可以直接登录。

2) 进入控制台,在 key 管理中创建新密钥,输入新 key 名称和验证码,勾

选“已阅读并同意以上条款”,会获得对应的 key。

3) 进入 key设置,启用产品中勾选“地图 SDK”选项,在输入框中填写对

应的.Android应用请填写:包名(package name),点击保存,完成 key的申

请。此时用户即可用刚创建的 key了。

Page 12: 腾讯Android 导航SDK接入文档

11

4) 导航 SDK 的权限需联系小助手开通权限。

2.2新建工程(已有可跳过)

第 1 步,下载并安装 Android Studio。按照指南下载并安装 Android

Studio。(注:下载地址为 Google官方网站)

https://developer.android.com/studio?pkg=studio

第 2 步,创建项目。按以下步骤新建一个 Empty Activity 的应用项目。

1、启动 Android Studio。如果您看到 Welcome to Android Studio 对话

框,请选择 Start a new Android Studio project,否则,请点击 Android

Studio 菜单栏中的 File,然后点击 New->New Project,按提示输入您的应用

名称、公司域和项目位置。 然后点击 Next。

2、选择您的应用所需的机型。 如果您不能确定自己的需要,只需选择

Phone and Tablet。然后点击 Next。

3、在“Add an activity to Mobile”对话框中选择 Empty Activity。

然后点击 Next。

4、按提示输入 Activity 名称、布局名称和标题。 使用默认值即可。 然

后点击 Finish。

2.3设置腾讯地图、导航 Key

在 Application 标签中的配置如下所示: <application android:allowBackup="true"

Page 13: 腾讯Android 导航SDK接入文档

12

android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="TencentMapSDK" android:value="申请的 Key"/>

</application>

2.4 引入导航 SDK、地图 SDK、定位 SDK

1) Maven引入导航 SDK 和地图 SDK:

repositories { maven { url "https://oss.sonatype.org/content/groups/public" }

} dependencies { // 地图 SDK implementation 'com.tencent.map:tencent-map-vector-sdk:4.3.9.9' // 导航 SDK implementation 'com.tencent.map:tencent-map-nav-sdk:5.2.6.0' // 导航支持库 implementation 'com.tencent.map:tencent-map-nav-surport:1.0.2.6'

}

2) 引用定位 SDK v8.7.5.1。使用导航 SDK推荐使用定制版定位 SDK,可联系小

助手获得。

2.5权限设置

SDK 需要使用网络,访问硬件存储等系统权限,在 AndroidManifest.xml 文

件里,添加如下权限:

<!-- 通过 GPS 得到精确位置 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 通过网络得到粗略位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 支持 A-GPS 辅助定位 --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

Page 14: 腾讯Android 导航SDK接入文档

13

<!-- 访问 WiFi 状态 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 修改 WiFi 状态,发起 WiFi 扫描 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 访问网络状态, 检测网络的可用性,需要网络运营商相关信息用于网络定位 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 访问网络的变化 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 读写手机 SD 卡权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 访问网络 --> <uses-permission android:name="android.permission.INTERNET" />

2.6混淆配置

在 module里找到 proguard-rules.pro文件,添加:

-dontwarn com.qq.taf.** -keep class com.qq.taf.** { *; } -keep public class com.tencent.map.ama.navigation.data.NavigationJNI {*;} -keep public class com.google.webp.libwebpJNI {*;} -dontwarn sun.misc.Unsafe -keep, includedescriptorclasses public class com.tencent.map.lib.gl.JNI { *;} -keep, includedescriptorclasses public class com.tencent.map.lib.gl.* { *;} -keep, includedescriptorclasses public class com.tencent.tencentmap.mapsdk.maps.a.* { *;} # 地图 SDK -keep class com.tencent.tencentmap.**{*;} -keep class com.tencent.map.**{*;} -keep class com.tencent.beacontmap.**{*;} -keep class navsns.**{*;} -dontwarn com.qq.** -dontwarn com.tencent.** # 定位 SDK -keepclassmembers class ** { public void on*Event(...); }

Page 15: 腾讯Android 导航SDK接入文档

14

-keep class c.t.**{*;} -keep class com.tencent.map.geolocation.**{*;} -dontwarn org.eclipse.jdt.annotation.** -dontwarn c.t.** # 导航 SDK -dontwarn sun.misc.Unsafe -keep, includedescriptorclasses public class com.tencent.map.lib.gl.JNI { *;} -keep, includedescriptorclasses public class com.tencent.map.lib.gl.* { *;} -keep, includedescriptorclasses public class com.tencent.tencentmap.mapsdk.maps.a.* { *;} -keep class com.iflytek.tts.TtsService.** { *; } -keep class com.tencent.map.navi.surport.** { *; } -keep class com.tencent.map.screen.** { *; } -keep class com.tencent.beacon.** { *; }

然后在 module 的 build.gradle文件中引用该混淆文件: buildTypes { release {

minifyEnabled true proguardFiles getDefaultProguardFile('proguard-

android.txt'), 'proguard-rules.pro' }

}

3.快速接入

3.1 驾车导航

3.1.1 导航初始化

在 layout文件中添加 CarNaviView: <com.tencent.map.navi.car.CarNaviView

android:id="@+id/car_navi_view" android:layout_width="match_parent" android:layout_height="match_parent"/>

地图生命周期控制。生命周期管理方法,用户需要在对应生命周期回调方

法中,主动调用。

@Override protected void onStart() {

mCarNaviView.onStart();

Page 16: 腾讯Android 导航SDK接入文档

15

super.onStart(); } @Override protected void onRestart() {

mCarNaviView.onRestart(); super.onRestart();

} @Override protected void onResume() {

mCarNaviView.onResume(); super.onResume();

} @Override protected void onPause() {

mCarNaviView.onPause(); super.onPause();

} @Override protected void onStop() {

mCarNaviView.onStop(); super.onStop();

} @Override protected void onDestroy() {

mCarNaviView.onDestroy(); super.onDestroy();

}

初始化 TencentCarNaviManager 实例,推荐使用单例模式:

// 实例化导航管理器 mTencentCarNaviManager = new TencentCarNaviManager(this); // 设置回调监听 Private TencentRouteSearchCallback mTencentSearchCallback = new TencentRouteSearchCallback() {

@Override public void onRouteSearchFailure(int errorCode, String

errorMessage) { // 算路失败回调

} @Override public void onRouteSearchSuccess(ArrayList<RouteData> routes)

{

Page 17: 腾讯Android 导航SDK接入文档

16

//最多三条路线数据:路线距离,路线点串,预估时间,路况数据等

} }; // 注册导航地图,接受导航事件 mTencentCarNaviManager.addNaviView(mCarNaviView); // 开启内置的语音播报模块 mTencentCarNaviManager.setInternalTtsEnabled(true);

3.1.2 驾车路径规划

发起路线规划代码如下

mTencentCarNaviManager.searchRoute(from,to, wayPoints, carSearchOptions, mTencentRouteSearchCallback);

其中参数说明如下表格所示,

参数 类型 必

填 说明

from NaviPoi 是 起点,一般使用当前定

位点赋值

latitude double 是 纬度

longitude double 是 经度

poiId String 否 起点 POI ID,传入后,

优先级高于坐标

to NaviPoi 是 目的地。

latitude double 是 纬度

longitude double 是 经度

Page 18: 腾讯Android 导航SDK接入文档

17

poiId String 否

POI ID(可通过腾讯位

置服务地点搜索服务得

到),当目的地为较大

园区、小区时,会以引

导点作为终点(如出入

口等),体验更优。

该参数优先级高于坐

标,但是当目的地无引

导点数据或 POI ID 失

效时,仍会使用坐标

作为终点

wayPoints List<NaviPoi> 否

途经点数组,最多设置

10个。路线规划按照数

组的顺序进行,不会按

路径最短原则进行调

整。

carSearchOptions CarRouteSearchOptions 是 路线规划策略

avoidToll Boolean 否 是否避开收费站

avoidHighway Boolean 否 是否避开高速公路

avoidCongestion Boolean 否 是否避开拥堵

navScene int 是 1:接驾;2:送驾

preLocations List<GpsLocation> 否

前序点。最好传入路线

规划之前的 50个定位

点,以提高起点的准确

行。

truckRouteSearchParams TruckRouteSearchParams 否

货车算路属性。当有货

车算路需求时使用,具

体参考导航 SDK 接口文

avoidAreaList List<List<LatLng>> 否

路线规划避让区域。最

多支持 32个避让区

域,每个区域可设置 9

个顶点,需为凸多边

形,顶点逆时针排列。

Page 19: 腾讯Android 导航SDK接入文档

18

如果数据不合法,则避

让策略不生效

3.1.3 开启、结束导航

// 使用第 routeIndex 条路开启导航 mTencentCarNaviManager.startNavi(routeIndex);

// 导航过程中将定位 SDK 回调获得到的定位点传给导航 SDK,设置回调频率为每秒 1 次 private TencentLocationListener mTencentLocationListener = new TencentLocationListener() {

@Override public void onLocationChanged(TencentLocation tencentLocation,

int error, String reason) {

if (error != TencentLocation.ERROR_OK || tencentLocation == null) { // 定位失败

return; }

mTencentCarNaviManager.updateLocation(LocationUtils.convertToGpsLocation(tencentLocation), error, reason);

} @Override public void onStatusUpdate(String name, int status, String desc) { } };

// 结束导航 mTencentCarNaviManager.stopNavi();

模拟导航方法:

//开启模拟导航,使用第 1 条路线进行导航

mTencentCarNaviManager.startSimulateNavi(0); //关闭模拟导航

mTencentCarNaviManager.stopSimulateNavi() ;

Page 20: 腾讯Android 导航SDK接入文档

19

3.2 步行导航

3.2.1 导航初始化

在 layout文件中添加 WalkNaviView:

<com.tencent.map.navi.walk.WalkNaviView android:id="@+id/walk_navi_view" android:layout_width="match_parent" android:layout_height="match_parent"/>

地图生命周期控制。生命周期管理方法,用户需要在对应生命周期回调方

法中,主动调用。

@Override protected void onStart() {

mWalkNaviView.onStart(); super.onStart();

} @Override protected void onRestart() {

mWalkNaviView.onRestart(); super.onRestart();

} @Override protected void onResume() {

mWalkNaviView.onResume(); super.onResume();

} @Override protected void onPause() {

mWalkNaviView.onPause(); super.onPause();

} @Override protected void onStop() {

mWalkNaviView.onStop(); super.onStop();

} @Override protected void onDestroy() {

mWalkNaviView.onDestroy(); super.onDestroy();

Page 21: 腾讯Android 导航SDK接入文档

20

}

初始化 TencentWalkNaviManager 实例,推荐使用单例模式:

// 实例化导航管理器 mTencentWalkNaviManager = new TencentWalkNaviManager(this); // 设置回调监听 Private TencentRouteSearchCallback mTencentSearchCallback = new TencentRouteSearchCallback() {

@Override public void onRouteSearchFailure(int errorCode, String

errorMessage) { // 算路失败回调

} @Override public void onRouteSearchSuccess(ArrayList<RouteData> routes)

{ //最多三条路线数据:路线距离,路线点串,预估时间,路况数据等

} }; // 注册导航地图,接受导航事件 mTencentWalkNaviManager.addTencentNaviListener(mWalkNaviView);

3.2.2 步行路径规划

发起路径规划代码如下

mTencentWalkNaviManager.searchRoute(from,to, mTencentRouteSearchCallback);

其中参数说明如下表格所示,

参数 类型 必

填 说明

from NaviPoi 是 起点,一般使用当前定位

点赋值

latitude double 是 纬度

Page 22: 腾讯Android 导航SDK接入文档

21

longitude double 是 经度

poiId String 否 兴趣点的 id

to NaviPoi 是 目的地。

3.2.3 开启、结束导航

// 使用第 routeIndex 条路开启导航 mTencentWalkNaviManager.startNavi(routeIndex);

// 导航过程中将定位 SDK 回调获得到的定位点传给导航 SDK,设置回调频率为每秒 1 次 private TencentLocationListener mTencentLocationListener = new TencentLocationListener() {

@Override public void onLocationChanged(TencentLocation tencentLocation,

int error, String reason) {

if (error != TencentLocation.ERROR_OK || tencentLocation == null) { // 定位失败

return; }

mTencentWalkNaviManager.updateLocation(LocationUtils.convertToGpsLocation(tencentLocation), error, reason);

} @Override public void onStatusUpdate(String name, int status, String desc) { } };

// 结束导航 mTencentWalkNaviManager.stopNavi();

模拟导航方法:

//开启模拟导航,使用第 1 条路线进行导航

mTencentWalkNaviManager.startSimulateNavi(0);

Page 23: 腾讯Android 导航SDK接入文档

22

//关闭模拟导航

mTencentWalkNaviManager.stopSimulateNavi() ;

3.3 骑行导航

3.3.1 导航初始化

在 layout文件中添加 RideNaviView:

<com.tencent.map.navi.ride.RideNaviView android:id="@+id/ride_navi_view" android:layout_width="match_parent" android:layout_height="match_parent"/>

地图生命周期控制。生命周期管理方法,用户需要在对应生命周期回调方

法中,主动调用。

@Override protected void onStart() {

mRideNaviView.onStart(); super.onStart();

} @Override protected void onRestart() {

mRideNaviView.onRestart(); super.onRestart();

} @Override protected void onResume() {

mRideNaviView.onResume(); super.onResume();

} @Override protected void onPause() {

mRideNaviView.onPause(); super.onPause();

} @Override protected void onStop() {

mRideNaviView.onStop(); super.onStop();

} @Override

Page 24: 腾讯Android 导航SDK接入文档

23

protected void onDestroy() { mRideNaviView.onDestroy(); super.onDestroy();

}

初始化 TencentRideNaviManager 实例,推荐使用单例模式:

// 实例化导航管理器 mTencentRideNaviManager = new TencentRideNaviManager(this); // 设置回调监听 Private TencentRouteSearchCallback mTencentSearchCallback = new TencentRouteSearchCallback() {

@Override public void onRouteSearchFailure(int errorCode, String

errorMessage) { // 算路失败回调

} @Override public void onRouteSearchSuccess(ArrayList<RouteData> routes)

{ //最多三条路线数据:路线距离,路线点串,预估时间,路况数据等

} }; // 注册导航地图,接受导航事件 mTencentRideNaviManager.addTencentNaviListener(mRideNaviView);

3.3.2 骑行路径规划

发起路径规划代码如下

mTencentRideNaviManager.searchRoute(from,to, rideRouteSearchOptions, mTencentRouteSearchCallback);

其中参数说明如下表格所示,

参数 类型 必

填 说明

from NaviPoi 是 起点,一般使用当前

定位点赋值

latitude double 是 纬度

Page 25: 腾讯Android 导航SDK接入文档

24

longitude double 是 经度

poiId String 否 兴趣点的 id

to NaviPoi 是 目的地。

rideRouteSearchOptions RideRouteSearchOptions 是 路线规划策略

mType int 是 骑行工具类型,0:自

行车,1:电动车

3.3.3 开启、结束导航

// 使用第 routeIndex 条路开启导航 mTencentRideNaviManager.startNavi(routeIndex);

// 导航过程中将定位 SDK 回调获得到的定位点传给导航 SDK,设置回调频率为每秒 1 次 private TencentLocationListener mTencentLocationListener = new TencentLocationListener() {

@Override public void onLocationChanged(TencentLocation tencentLocation,

int error, String reason) {

if (error != TencentLocation.ERROR_OK || tencentLocation == null) { // 定位失败

return; }

mTencentRideNaviManager.updateLocation(LocationUtils.convertToGpsLocation(tencentLocation), error, reason);

} @Override public void onStatusUpdate(String name, int status, String desc) { } };

// 结束导航 mTencentRideNaviManager.stopNavi();

Page 26: 腾讯Android 导航SDK接入文档

25

模拟导航方法:

//开启模拟导航,使用第 1 条路线进行导航

mTencentRideNaviManager.startSimulateNavi(0); //关闭模拟导航

mTencentRideNaviManager.stopSimulateNavi() ;

4.功能概述

4.1 设置设备号

用户可在 APP启动时为导航设置设备唯一标识。出现问题时可向我们提供

该设备唯一标识和发生问题的时间段,以便我们帮助您排查问题。设置代码如

下:

TencentNavi.Config config = new TencentNavi.Config(); config.setDeviceId(“XXXXXX-XXXX-XXXX-XXXX-XXXXXX”); TencentNavi.init(this, config);

定位 SDK 设置代码如下:

TencentLocationRequest request = TencentLocationRequest.create(); Request.setUniqueId(“XXXXXX-XXXX-XXXX-XXXX-XXXXXX”);

4.2 驾车导航

4.2.1 自定义 UI

导航 SDK 提供了一些默认 UI组件,开发者可以根据需要控制这些元素的现

实和隐藏。

4.2.1.1 路口放大图

路口放大图默认开启,可使用如下方法控制:

// 设置不开启路口放大图功能

mTencentCarNaviManager.setEnlargedIntersectionEnabled(false)

4.2.1.2 车道线

车道线默认开启,可使用如下方法控制:

//设置不开启车道线功能

Page 27: 腾讯Android 导航SDK接入文档

26

mTencentCarNaviManager.setGuidedLaneEnabled(false)

4.2.1.3 顶部导航面板

顶部导航面板默认开启,可使用如下方法控制:

// 设置不展示顶部导航面板

mCarNaviView.setNaviPanelEnabled(false);

4.2.1.4 更换起点、终点、途径点的图标

// 更换起点图标

mCarNaviView.configStartPointMarkerpresentation(fromMarkerBitmap, realFromMarkerBitmap);

// 更换终点图标

mCarNaviView.configEndPointMarkerpresentation(toMarkerBitmap,realToMarkerBitmap); // 更换途经点图标

mCarNaviView.configWayPointMarkerpresentation(wayMarkerBitmaps);

4.2.1.5 设置是否使用默认资源

SDK 中 assets 下的图片都可以自定义,如小车 marker电子眼 marker、车

道线箭头图片等。使用时需要将同名文件放到 module 下的 assets目录下。 然

后设置可替换默认资源:

mTencentCarNaviManager.setIsDefaultRes(false);

Page 28: 腾讯Android 导航SDK接入文档

27

4.2.1.6 设置自车点位置

// 设置导航过程中 3d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mCarNaviView.setNaviFixingProportion3D(0.5,0.5); // 设置导航过程中 2d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mCarNaviView.setNaviFixingProportion2D(0.5,0.5);

4.2.1.7 设置导航日夜模式

默认是根据太阳升起落下时间自动切换模式,也可以设置一直使用日间模

式:

//设置导航一直为日间模式

mCarNaviView.setDayNightMode(DayNightMode.DAY_MODE);

4.2.1.8 设置导航牵引线

默认情况下开启导航牵引线,可在导航前和导航中设置牵引线颜色

// 控制牵引线显隐

mCarNaviView.setShowODLine(...); // 设置牵引线颜色 // param color ARGB 颜色值 mCarNaviView.setODLineColor(...)

4.2.1.9 设置导航模式

默认为 3D 车头向上模式,导航模式包括:

• 3D 最佳视野:MODE_3DCAR_TOWARDS_UP ,3D 车头朝上模式.该模式下,

车头始终保持指向屏幕上方,地图进行旋转并动态调整缩放级别.

• 2D 最佳视野:MODE_2DMAP_TOWARDS_NORTH , 2D 地图朝北模式.该模式

下,车头进行旋转,地图保持上北下南并动态调整缩放级别.

Page 29: 腾讯Android 导航SDK接入文档

28

• 2D全览模式:MODE_OVERVIEW ,2D 路线全览模式.该模式下,车头进行旋

转,地图保持上北下南,同时会始终展示整条导航路线.

• 剩余全览模式:MODE_REMAINING_OVERVIEW,剩余路线全览模式。该模式

下,车头进行旋转,地图保持上北下南,同时会始终展示整条导航路线的

剩余部分。

设置方法如下,

// 设置 3D 车头朝上 mCarNaviView.setNaviMode(NaviMode.MODE_3DCAR_TOWARDS_UP);

回弹模式:导航态中,用户使用手势操作地图后进入回弹模式,手势结束

默认 5秒后切换回之前的导航模式,可通过如下代码设置回弹时间:

// 回弹时间改为 10s mCarNaviView.setBounceTime(10);

4.2.1.10 设置自定义地图样式

需要先在官网控制台配置个性化地图样式,导航可通过如下方法使用:

// 在官网配置的自定义样式列表中的顺序,从 1 开始。注意调用此方法,日夜模式失效 CarNaviView#setMapStyle(int)

Page 30: 腾讯Android 导航SDK接入文档

29

4.2.1.11 其余导航控件

上图中红框部分是默认的 UI组件,包括光柱图,地图缩放控件,当前车

速,限速信息等,可以分别控制显隐,代码如下:

// 展示所有导航 UI控件 CarNaviInfoPanel carNaviInfoPanel = mCarNaviView.showNaviInfoPanel(); CarNaviInfoPanel.NaviInfoPanelConfig naviInfoPanelConfig = new CarNaviInfoPanel.NaviInfoPanleConfig();

// 隐藏底部退出、设置控件 naviInfoPanelConfig.setButtomPanelEnable(false);

// 隐藏主辅路切换按钮 naviInfoPanelConfig.setChangeRoadEnable(false);

// 隐藏当前车速 UI

naviInfoPanelConfig.setCurrentSpeedEnable(false);

// 隐藏限速、当前路名 UI

naviInfoPanelConfig.setLimitAndRoadEnable(false);

// 隐藏全览/非全览切换按钮 naviInfoPanelConfig.setShowFullViewEnable(false);

// 隐藏路况显隐按钮 naviInfoPanelConfig.setTrafficBarEnable(false);

// 隐藏智能定位 UI

naviInfoPanelConfig.setSmartLoEnable(false);

Page 31: 腾讯Android 导航SDK接入文档

30

// 更新以上设置 carNaviInfoPanel.setNaviInfoPanelConfig(naviInfoPanelConfig);

接收导航退出按钮的点击事件:

carNaviInfoPanel.setOnNaviInfoListener(new carNaviInfoPanel.OnNaviInfoListener() { @Override

public void onBackClick() { } }

);

4.2.1.12 路况线拥堵气泡

默认是关闭拥堵气泡的

// 开启拥堵气泡

Page 32: 腾讯Android 导航SDK接入文档

31

mCarNaviView.setTrafficBubbleEnabled(true);

4.2.1.13 路口比例尺缩放增强

默认情况下,导航中不会根据前方路况情况进行比例尺自动缩放,v5.2.5

中新增功能,已提供最佳视野

// 开启自动缩放比例尺

mCarNaviView.setAutoScaleEnabled(true);

4.2.2 导航回调事件

1)可实现 INaviView协议从而获取导航展示信息的回调事件:

private INaviView mINaviView = new INaviView() {

@Override public void onUpdateNavigationData(NavigationData

navigationData) { // 获取导航过程相关数据

} @Override public void onShowEnlargedIntersection(Bitmap bitmap) { //获取路口放大图资源

} @Override public void onHideEnlargedIntersection() { // 隐藏路口放大图

} @Override public void onShowGuidedLane(Bitmap bitmap) { // 获取车道线资源

} @Override public void onHideGuidedLane() { // 隐藏车道线

} @Override @deprecated public void onUpdateTraffic(String routId, int totalDistance,

int leftDistance, ArrayList<LatLng> points, ArrayList<TrafficItems> trafficItems, Boolean isCurrentRoute) {

// 获取更新导航线路路况的信息。

}

Page 33: 腾讯Android 导航SDK接入文档

32

@Override public void onGpsRssiChanged(int rssi) { // GPS 信号强度变化. 0:无信号,1:信号弱,2:信号中,3:信号强 } @Override public void onSmartLocStart() {

// 智能定位的开启回调

} @Override public void onSmartLocEnd() {

// 智能定位的结束回调

} @Override public void onGpsRssiChanged(int rssi) {

// GPS信号变化回调,可用于绘制卫星信号 } @Override public void onGpsWeakNotify() {

// GPS信号弱回调 } @Override public void onGpsStrongNotify() {

// GPS信号恢复回调 } @Override public void onRouteDidChange(RouteData route,

ArrayList<TrafficItem> trafficItem) {

// 当前导航路线切换的回调 } @Override public void onDeleteBackupRoutes(ArrayList<String>

deletedRouteIDs) {

// 开启多路线功能时,经过分歧点时删除的备选路线 } @Override public void onAddBackupRoutes(ArrayList<RouteData> routes) {

// 开启多路线功能时,补充的伴随路线 } @Override public void onUpdateTraffic(RouteTrafficStatus

routeTrafficStatus) {

// 当前路线路况更新 } @Override

Page 34: 腾讯Android 导航SDK接入文档

33

public void onUpdateBackupRoutesTraffic(ArrayLIst<RouteTrafficStatus> routeTraffics) {

// 备选路线路况更新 }

}

// 添加事件监听

mTencentCarNaviManager.addNaviView(mINaviView); // 适时移除事件监听

mTencentCarNaviManager.removeNaviView(mINaviView);

其中 NavigationData 包含:当前道路路名、当前速度 、当前道路剩余距离、

总剩余距离、总剩余时间、当前道路限速、下一道路路名、前方转向箭头图

片、途经点信息等。

2)获得导航状态事件回调:

private TencentNaviCallback mTencentNaviCallback = new TencentNaviCallback() {

@Override @deprecated public int onVoiceBroadcast(NaviTts tts) {

// 语音播报文案 return 1;

} @Override public void onUpdateAttachedLocation(AttachedLocation

location) {

// 导航过程中定位点的信息回调,其中包含原始定位和吸附定位 } @Override public void onArrivedDestination() {

// 即将到达目的地 } @Override

public void onStartNavi() { // 开启导航 }

Page 35: 腾讯Android 导航SDK接入文档

34

@Override public void onStopNavi() { // 结束导航 } @Override public void onOffRoute() { // 发生偏航 } @Override public void onRecalculateRouteStarted(int type) { // 偏航发起重新算路,开发者无需处理此信息 } @Override public void onRecalculateRouteCanceled() {

// 偏航重新算路请求取消,可能是由于误偏航之后马上纠正,从而取消请求 } @Override public void onRecalculateRouteSuccess(int type,

ArrayList<RouteData> routeDataList) { //偏航重新路线规划成功回调。注意:当 RouteData 中的 getDataStatus 方法返

回 1 时,表示定位处在没有道路的地方,此时不会提供路线数据,直到定位点回到有路的地方;如果有路线数据,导航默认选择了第一条路进行导航

}

@Override public void onRecalculateRouteFailure(int type, int errorCode,

String errorMessage) { // 偏航重新路线规划失败,开发者无需处理此信息

}

@Override public void onPassedWayPoint(int passPointIndex) { // 达到第 passPointIndex个途经点回调 } @Override public void onUpdateRoadType(int roadType) { // 主辅路切换提示: 0 为无提示,1 为在桥上,2为在桥下,3 为在主路,4为在

辅路,5为在对面,6为桥下主路,7为桥下辅路 }

3)导航适配接口 TencentNaviAdapter:

@Override

Page 36: 腾讯Android 导航SDK接入文档

35

public void getVoiceBroadState(NaviTts tts) { // 获取语音播报的结果状态,默认 0

Return 0; }

@Override public ArrayList<String>

getPickFollowedRoutes(ArrayList<RouteData> routes) { // 挑选备选路线的方案 }

4.2.3 一键上报

导航使用者遇到导航问题时可以进行问题反馈上报,包括:拥堵、施工、封

路、事故、管制、语音反馈。

// 设置城市编码:

UploadPercentor.setAdCode("城市编码"); // 设置 apikey

UploadPercentor.setApiKey("xxxxxx-xxxx-xxxx-xxxxxx"); // 设置订单 id

Page 37: 腾讯Android 导航SDK接入文档

36

UploadPercentor.setOrderId("xxx"); // 设置用户 id

UploadPercentor.setUserId("xxx"); // 可能造成语音冲突,可关闭语音反馈功能 UploadPercentor.setHideVioce(); 以上配置必须设置,否则会导致上传失败。开发者需要自己创建上报按钮,点击上报按钮调用如下方法:

OneKeyReportManager.getInstance().showOneKeyReportDialog(mContext);

4.2.4 伴随路线

可开启导航过程中的伴随路线

用户可以根据需求,开启和关闭伴随路线。当用户开启伴随路线后,可以

挑选,切换,删除伴随路线的显示。

A.开启备选路线

mTencentCarNaviManager.setMulteRoutes(true); // 接受相关事件回调 mCarNaviView.setNaviMapActionCallback(mTencentCarNaviManager);

B.从主路线切换到备选路线

/**

Page 38: 腾讯Android 导航SDK接入文档

37

* 切换⾄备选路线。 *

* @param routeID 备选路线 id

*

* @return 结果状态码: * <ul>

* <li> 0 : 切换成功 * <li> 1 : 此路线已经是导航主路线 * <li> 2 : 没找到对应的路线 * <li> 3 : 当前非导航状态,无法切换 * </ul> * @since 5.2.6 */ public int changeToFollowedRoute(String routeID)

C.导航中删除某条备选路线

/**

* 导航过程中删除某备选路线。 *

* @param routeID 备选路线 id

*

* @return 结果状态码: * <ul>

* <li> 0 : 删除成功 * <li> 1 : 导航主路线不支持删除 * <li> 2 : 没找到对应的路线 * <li> 3 : 当前非导航状态,无法切换 * </ul> * @since 5.2.6 */ public int deleteFollowedRoute(String routeID)

D. 开启多路线后,在 INaviView 接口内获取导航补充的备选路线和经过分

歧点时删除掉的备选路线。

/**

* 开启多路线功能时,经过分歧点时删除的备选路线。 *

* @param deletedRouteIDs 删除掉的路线 ID数组

Page 39: 腾讯Android 导航SDK接入文档

38

* @since 5.2.6 */ void onDeleteBackupRoutes(ArrayList<String> deletedRouteIDs); /**

* 开启多路线功能时,补充的伴随路线。 *

* @param routes 补充的路线数组 * @since 5.2.6 */ void onAddBackupRoutes(ArrayList<RouteData> routes);

E.挑选需要显示的备选路线,通过 TencentNaviAdapter回调给导航 SDK,

默认全部补充的备选路线。

/**

* 挑选备选路线的回调。 *

* @param routes 备选路线信息 *

* @return 挑选需要展示的备选路线 id数组 */ public ArrayList<String>

getPickFollowedRoutes(ArrayList<RouteData> routes)

F.点击备选路线后,在 INaviView 内接收切换路线回调:

/**

* 当前导航路线切换的回调。 *

* @param route 切换到的导航路线数据 * @param trafficItems 当前路线的路况数据 * @since 5.2.6 */ void onRouteDidChange(RouteData route,

ArrayList<TrafficItem> trafficItems);

G.导航过程中,在 INaviView中分别接收主路线和备选路线的路况刷新数

据:

/**

* 当前路线路况更新。 *

* @param routeTrafficStatus 路线路况更新数据

Page 40: 腾讯Android 导航SDK接入文档

39

* @since 5.2.6 */ void onUpdateTraffic(RouteTrafficStatus

routeTrafficStatus); /**

* 备选路线路况更新。 *

* @param routeTrafficStatusList 路线路况更新数据 * @since 5.2.6 */ void

onUpdateBackupRoutesTraffic(ArrayList<RouteTrafficStatus> routeTrafficStatusList);

4.2.5 自动灌点

以前导航开启之后需要每秒调用如下方法给导航 SDK 设置定位点,以驱动

导航工作:

mTencentCarNaviManager.updateLocation(location, error, reason);

自动灌点的功能是导航 SDK耦合腾讯定位 SDK,然后导航 SDK 自己去自动获

得定位点,开发者不需要调用上述方法给导航 SDK 设置定位点了。

开启自动灌点功能代码如下,

// 开启自动灌点开关 mTencentCarNaviManager.setUseExtraLocationData (false); // 定位管理类关联上下文 TNKLocationManager.getInstance().setContext(getApplicationContext());

开发者需要使用导航 SDK 的定位管理类来获取定位点信息,无需直接调用

定位 SDK 的 TencentLocationManager:

// 添加定位数据回调,如果此时未开启定位 SDK,会自动开启定位 SDK TNKLocationManager.getInstance().addLocationListener(new ITNKLocationCallBack() {

@Override public void requestLocationUpdatesResult(int errorCode) { } @Override

Page 41: 腾讯Android 导航SDK接入文档

40

public void onLocationChanged(TencentLocation tencentLocation, int errorcode, String reason) {

} }); // 移除定位数据回调监听 TNKLocationManager.getInstance().removeLicationListener(...);

4.2.6 智能定位

智能定位主要是在驾车过程中 GPS长时间丢失后,利用网络定位结果+导航

规划路径来进行定位/导航。使用 4.2.5 自动灌点功能后,智能定位自动开启。

4.2.7 惯性导航

隧道场景下 GPS 信号存在大量丢失或者缺损的情况,导航 SDK 针对于此场

景进行了特殊补充,其会在隧道内推导一系列定位点,沿规划的路线进行导

航,直至出隧道恢复 GPS 信号,使导航效果更加平滑顺畅。需要注意的是,惯

性导航只是针对于隧道场景下进行的特殊处理。

/**

* 更新吸附点回调 */ void onUpdateAttachedLocation(AttachedLocation location) {

// 是否为惯性导航推导出的点、并非真实定位点 // location.isMockGPS() }

4.3 步行导航

4.3.1 自定义 UI

导航 SDK 提供了一些默认 UI组件,开发者可以根据需要控制这些元素的现

实和隐藏。

Page 42: 腾讯Android 导航SDK接入文档

41

4.3.1.1 顶部导航面板

顶部导航面板默认开启,可使用如下方法控制:

// 设置不展示顶部导航面板

mWalkNaviView.setNaviPanelEnabled(false);

4.3.1.2 更换起点、终点的图标

// 更换起点图标

mWalkNaviView.configStartPointMarkerpresentation(fromMarkerBitmap, realFromMarkerBitmap);

// 更换终点图标

mWalkNaviView.configEndPointMarkerpresentation(toMarkerBitmap,realToMarkerBitmap);

4.3.1.3 设置是否使用默认资源

SDK 中 assets 下的图片都可以自定义,如小车 marker电子眼 marker、车

道线箭头图片等。使用时需要将同名文件放到 module 下的 assets目录下。 然

后设置可替换默认资源:

mTencentWalkNaviManager.setIsDefaultRes(false);

4.3.1.4 设置自车点位置

// 设置导航过程中 3d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mWalkNaviView.setNaviFixingProportion3D(0.5,0.5); // 设置导航过程中 2d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mWalkNaviView.setNaviFixingProportion2D(0.5,0.5);

4.3.1.5设置导航模式

默认为 3D 车头向上模式,导航模式包括:

• 3D 最佳视野:MODE_3DCAR_TOWARDS_UP ,3D 车头朝上模式.该模式下,

车头始终保持指向屏幕上方,地图进行旋转并动态调整缩放级别.

Page 43: 腾讯Android 导航SDK接入文档

42

• 2D 最佳视野:MODE_2DMAP_TOWARDS_NORTH , 2D 地图朝北模式.该模式

下,车头进行旋转,地图保持上北下南并动态调整缩放级别.

• 2D全览模式:MODE_OVERVIEW ,2D 路线全览模式.该模式下,车头进行旋

转,地图保持上北下南,同时会始终展示整条导航路线.

• 剩余全览模式:MODE_REMAINING_OVERVIEW,剩余路线全览模式。该模式

下,车头进行旋转,地图保持上北下南,同时会始终展示整条导航路线的

剩余部分。

设置方法如下,

// 设置 3D 车头朝上 mWalkNaviView.setNaviMode(NaviMode.MODE_3DCAR_TOWARDS_UP);

回弹模式:导航态中,用户使用手势操作地图后进入回弹模式,手势结束

默认 5秒后切换回之前的导航模式,可通过如下代码设置回弹时间:

// 回弹时间改为 10s mWalkNaviView.setBounceTime(10);

Page 44: 腾讯Android 导航SDK接入文档

43

4.3.1.5 其余导航控件

上图中红框部分是默认的 UI组件,包括底部导航栏、全览模式按钮、缩放

按钮,可以分别控制显隐,代码如下:

// 展示所有导航 UI控件 CarNaviInfoPanel carNaviInfoPanel = mWalkNaviView.showNaviInfoPanel(); CarNaviInfoPanel.NaviInfoPanelConfig naviInfoPanelConfig = new CarNaviInfoPanel.NaviInfoPanleConfig();

// 隐藏底部导航栏控件 naviInfoPanelConfig.setButtomPanelEnable(false);

// 隐藏全览/非全览切换按钮 naviInfoPanelConfig.setShowFullViewEnable(false);

// 更新以上设置 carNaviInfoPanel.setNaviInfoPanelConfig(naviInfoPanelConfig);

Page 45: 腾讯Android 导航SDK接入文档

44

接收导航退出按钮的点击事件:

carNaviInfoPanel.setOnNaviInfoListener(new carNaviInfoPanel.OnNaviInfoListener() { @Override

public void onBackClick() { } }

);

4.3.2 导航回调事件

这是步行导航事件的回调 TencentWalkNaviListener 。

public interface TencentWalkNaviListener extends TencentNaviListener { /**

* 路线重新规划成功 *

* @param routeDataList 路线数组 */ void onRecalculateRouteSuccess(ArrayList<RouteData> routeDataList); /**

* 传感器监听手机朝向变化 *

* @param direction 手机方向 */ void onDirectionUpdateBySensor(float direction); }

这是导航事件回调的基类 TencentNaviListener。

public interface TencentNaviListener { /**

* 开启导航 */ void onStartNavi(); /**

* 关闭导航 */ void onStopNavi(); /**

Page 46: 腾讯Android 导航SDK接入文档

45

* 发生偏航 */ void onOffRoute(); /**

* tts播报。开发者返回 0表示该条语音文本没有被成功播报,返回 1则表示播报成功。 * 如果用户返回 0,则导航 SDK认为该条语音没有被成功播报,会在合适的时机再次返回该条播报内容。 */ int onVoiceBroadcast(NaviTts tts); /**

* 到达目的地回调. 如果尚未结束导航, 这个方法可能执行多次. */ void onArrivedDestination(); /**

* 更新吸附点回调 *

* @param location 参见{@link com.tencent.map.navi.data.AttachedLocation} */ void onUpdateAttachedLocation(AttachedLocation location); /**

* 通知 GPS信号变化.可用于绘制卫星信号. * 0:无信号,1:信号弱,2:信号中,3:信号强 *

* @param rssi GPS信号强度 */ void onGpsRssiChanged(int rssi); /**

* 更新导航面板所需数据,包括路名,距离信息以及时间信息等. *

* @param data 导航面板数据 */ void onUpdateNavigationData(NavigationData data); /**

* gps信号弱回调。是通过一段时间内的定位信息判定得来 */ void onGpsWeakNotify();

Page 47: 腾讯Android 导航SDK接入文档

46

/**

* gps恢复回调。是通过一段时间内的定位信息判定得来 */ void onGpsStrongNotify(); /**

* GPS定位结果有效/无效 *

* @param isGpsValid GPS定位结果有效/无效 */ void onGpsStatusChanged(boolean isGpsValid); /**

* 更新当前路线 * @param routeData 当前路线 */ void onUpdateCurrentRoute(RouteData routeData); /**

* 改变资源 */ void onChangeRes(boolean isDefaultRes); }

4.4骑行导航

4.4.1 自定义 UI

导航 SDK 提供了一些默认 UI组件,开发者可以根据需要控制这些元素的现

实和隐藏。

4.4.1.1 顶部导航面板

顶部导航面板默认开启,可使用如下方法控制:

// 设置不展示顶部导航面板

mRideNaviView.setNaviPanelEnabled(false);

4.4.1.2 更换起点、终点的图标

// 更换起点图标

mRideNaviView.configStartPointMarkerpresentation(fromMarkerBitmap, realFromMarkerBitmap);

Page 48: 腾讯Android 导航SDK接入文档

47

// 更换终点图标

mRideNaviView.configEndPointMarkerpresentation(toMarkerBitmap,realToMarkerBitmap);

4.4.1.3 设置是否使用默认资源

SDK 中 assets 下的图片都可以自定义,如小车 marker电子眼 marker、车

道线箭头图片等。使用时需要将同名文件放到 module 下的 assets目录下。 然

后设置可替换默认资源:

mTencentRideNaviManager.setIsDefaultRes(false);

4.4.1.4 设置自车点位置

// 设置导航过程中 3d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mRideNaviView.setNaviFixingProportion3D(0.5,0.5); // 设置导航过程中 2d 模式下,车标位于地图宽高的比例,默认 x 坐标为 0.5 ,y 坐标为 0.75

mRideNaviView.setNaviFixingProportion2D(0.5,0.5);

4.4.1.5设置导航模式

默认为 3D 车头向上模式,导航模式包括:

• 3D 最佳视野:MODE_3DCAR_TOWARDS_UP ,3D 车头朝上模式.该模式下,

车头始终保持指向屏幕上方,地图进行旋转并动态调整缩放级别.

• 2D 最佳视野:MODE_2DMAP_TOWARDS_NORTH , 2D 地图朝北模式.该模式

下,车头进行旋转,地图保持上北下南并动态调整缩放级别.

• 2D全览模式:MODE_OVERVIEW ,2D 路线全览模式.该模式下,车头进行旋

转,地图保持上北下南,同时会始终展示整条导航路线.

• 剩余全览模式:MODE_REMAINING_OVERVIEW,剩余路线全览模式。该模式

下,车头进行旋转,地图保持上北下南,同时会始终展示整条导航路线的

剩余部分。

Page 49: 腾讯Android 导航SDK接入文档

48

设置方法如下,

// 设置 3D 车头朝上 mRideNaviView.setNaviMode(NaviMode.MODE_3DCAR_TOWARDS_UP);

回弹模式:导航态中,用户使用手势操作地图后进入回弹模式,手势结束

默认 5秒后切换回之前的导航模式,可通过如下代码设置回弹时间:

// 回弹时间改为 10s mRideNaviView.setBounceTime(10);

4.4.1.6 其余导航控件

Page 50: 腾讯Android 导航SDK接入文档

49

上图中红框部分是默认的 UI组件,包括导航栏,全览模式按钮,缩放级别

控制按钮,当前速度等,分别控制显隐,代码如下:

// 展示所有导航 UI控件 CarNaviInfoPanel carNaviInfoPanel = mRideNaviView.showNaviInfoPanel(); CarNaviInfoPanel.NaviInfoPanelConfig naviInfoPanelConfig = new CarNaviInfoPanel.NaviInfoPanleConfig();

// 隐藏底部导航栏控件 naviInfoPanelConfig.setButtomPanelEnable(false);

// 隐藏全览/非全览切换按钮 naviInfoPanelConfig.setShowFullViewEnable(false);

// 隐藏当前车速控件 naviInfoPanelConfig.setCurrentSpeedEnable(false);

// 更新以上设置 carNaviInfoPanel.setNaviInfoPanelConfig(naviInfoPanelConfig);

接收导航退出按钮的点击事件:

carNaviInfoPanel.setOnNaviInfoListener(new carNaviInfoPanel.OnNaviInfoListener() { @Override

public void onBackClick() { } }

);

4.4.2 导航回调事件

这是步行导航事件的回调 TencentRideNaviListener。

public interface TencentRideNaviListener extends TencentNaviListener { /**

* 路线重新规划成功 *

* @param routeDataList 路线数组 */ void onRecalculateRouteSuccess(ArrayList<RouteData> routeDataList);

Page 51: 腾讯Android 导航SDK接入文档

50

/**

* 传感器监听手机朝向变化 *

* @param direction 手机方向 */ void onDirectionUpdateBySensor(float direction); }

这是导航事件回调的基类 TencentNaviListener。

public interface TencentNaviListener { /**

* 开启导航 */ void onStartNavi(); /**

* 关闭导航 */ void onStopNavi(); /**

* 发生偏航 */ void onOffRoute(); /**

* tts播报。开发者返回 0表示该条语音文本没有被成功播报,返回 1则表示播报成功。 * 如果用户返回 0,则导航 SDK认为该条语音没有被成功播报,会在合适的时机再次返回该条播报内容。 */ int onVoiceBroadcast(NaviTts tts); /**

* 到达目的地回调. 如果尚未结束导航, 这个方法可能执行多次. */ void onArrivedDestination(); /**

* 更新吸附点回调 *

* @param location 参见{@link com.tencent.map.navi.data.AttachedLocation} */ void onUpdateAttachedLocation(AttachedLocation location);

Page 52: 腾讯Android 导航SDK接入文档

51

/**

* 通知 GPS信号变化.可用于绘制卫星信号. * 0:无信号,1:信号弱,2:信号中,3:信号强 *

* @param rssi GPS信号强度 */ void onGpsRssiChanged(int rssi); /**

* 更新导航面板所需数据,包括路名,距离信息以及时间信息等. *

* @param data 导航面板数据 */ void onUpdateNavigationData(NavigationData data); /**

* gps信号弱回调。是通过一段时间内的定位信息判定得来 */ void onGpsWeakNotify(); /**

* gps恢复回调。是通过一段时间内的定位信息判定得来 */ void onGpsStrongNotify(); /**

* GPS定位结果有效/无效 *

* @param isGpsValid GPS定位结果有效/无效 */ void onGpsStatusChanged(boolean isGpsValid); /**

* 更新当前路线 * @param routeData 当前路线 */ void onUpdateCurrentRoute(RouteData routeData); /**

* 改变资源 */ void onChangeRes(boolean isDefaultRes); }

Page 53: 腾讯Android 导航SDK接入文档

52

5.网约车场景

5.1 快车业务

快车业务最简调用导航 SDK、定位 SDK、地图 SDK、司乘同显 SDK 时序图如

下所示,

路线规划策略类 CarRouteSearchOptions 在接送驾场景建议使用不同的策

略。

1) 接驾路线规划建议策略:

navScene=1&avoidToll=true&avoidHighway=false&avoidCongestion=true

2) 送驾路线规划建议策略:

ᛯ6'. ਧ֖6'. .'ด6ݶԙݪ

����Ӥಸݪਧ֖מ௳�ၝܔᔮᕹጱᥝמ௳�

ᒒݪ

����ྯᑁࢧ᧣ਧ֖מ௳

����ളکᦈ҅ܔᬰᤈളḩ᪠ᕚᥢښ

.'ਧ֖6ސ҅ܔލ����

����ᬬࢧᕮຎ̶ୌᦓݪᒒीے०ᨳ᯿ᦶೲᰵ

.'6ࢶ

����ᕲګ᪠ᕚ̵PDUNHUᒵ8,زᔰ

����ސᛯ҅ᬰᤈളḩ

௳מᴫਧ֖ޕ̵௳מىᛯፘ᧣ࢧ����

����Ӥಸਧ֖מ௳̵᪠ᕚמ௳

�ᬡളḩᅩ҅؊ྊᛯک����

����ԙਮӤ҅ᬰᤈᭆḩ᪠ᕚᥢښ�

����ᬬࢧᕮຎ̶ୌᦓݪᒒीے०ᨳ᯿ᦶೲᰵ

����ᕲګ᪠ᕚ̵PDUNHUᒵ8,زᔰ

����ԙਮ᪠҅ސᛯ҅ᬰᤈᭆḩ

௳מᴫਧ֖ޕ̵௳מىᛯፘ᧣ࢧ����

����Ӥಸਧ֖מ௳̵᪠ᕚמ௳

�ᬡᭆḩᅩ҅؊ྊᛯک����

����ත҅؊ྊਧ֖6'.

Page 54: 腾讯Android 导航SDK接入文档

53

navScene=2&avoidToll=false&avoidHighway=false&avoidCongestion=true

路线规划最多返回 3条路线,CarRouteSearchOptions还提供方法对 3条路

线重新排序: // 0:默认; 1:距离优先; 2:价格优先 mSearchOptions.setRouteTraticeType(2); // 设置单价:每公里 2.6 元、每分钟 0.6 元 mSearchOptions.setPrice(2.5,0.6);