示例中心
功能在线体验
控制台

高德 开发 Android 导航SDK 开发指南 导航组件 使用导航组件

更新时间:2018年12月18日

简介

导航组件功能自 Android 导航 SDK V5.2.0 版本起开始支持。

  • 导航组件是一套有界面封装的导航模块,导航组件的推出给开发者提供了更便捷的方式,将导航能力集成到自己的APP中。导航组件采用与高德地图客户端同样的界面元素与交互方式,定期进行界面元素更新与高德地图客户端保持同步。
  • 导航组件调起方式简单,但无法进行界面的自定义,如果您有一些自定义需求,还是要使用之前的导航View,可以参考导航Demo中的导航UI自定义部分。
  • 目前导航组件只提供驾车与货车两种导航方式,其余方式目前暂未提供。
  • 导航组件涵盖线路规划起点、终点选择页面,多路线规划选择页面,导航页面。效果如下:

启动导航组件

第一步,增加所需权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

第二步,在 AndroidManifest.xml 中配置 Activity

<activity android:name="com.amap.api.navi.AmapRouteActivity"
              android:theme="@android:style/Theme.NoTitleBar"
              android:configChanges="orientation|keyboardHidden|screenSize" />

第三步,启动导航组件

提供两种方式启动导航组件,分别是不传入起终点启动导航组件(直接启动,起点终点由用户输入),以及传入起点、途径点、终点启动导航组件。

  • 不传入起点、途径点、终点启动导航组件:
AmapNaviPage.getInstance().showRouteActivity(context, new AmapNaviParams(null), IndexActivity.this);
  • 传入起点、途径点、终点启动导航组件:

以下内容自 Android 导航 SDK V5.3.0版本起支持

通过设置起点、途径点(最多支持三个)、终点直接调起路径规划页面;支持通过设置页面调起类型选择方式,当前默认仅可选择驾车导航模式。

一个点数据可以通过经纬度(latlng),名称(name),高德POIId来描述,其参数规则如下:

  1. 经纬度数据为必填参数;
  2. 名称是可选参数仅用于显示地点名称,如果设置了名称参数,会优先考虑显示所设置的名称,如果不传名称将使用默认值,如“终点”、“途径点1”;
  3. 高德POIId是可选参数,如果设置高德POIId数据,启动导航组件时将会使用POIId做POI精确检索,获得的POI出入口信息经纬度以及POI名称会覆盖设置的经纬度(latlng)和名称(name)数据两个参数。
  4. 当不设置起点信息时,会采用用户当前位置作为起点,并显示地点名称为“我的位置”。

传入起点、途径点、终点启动导航组件路线规划页示例:

Poi start = new Poi("三元桥", new LatLng(39.96087,116.45798), "");
/**终点传入的是北京站坐标,但是POI的ID "B000A83M61"对应的是北京西站,所以实际算路以北京西站作为终点**/
Poi end = new Poi("北京站", new LatLng(39.904556, 116.427231), "B000A83M61");
List<Poi> wayList = new ArrayList();//途径点目前最多支持3个。
wayList.add(new Poi("团结湖", new LatLng(39.93413,116.461676), ""));
wayList.add(new Poi("呼家楼", new LatLng(39.923484,116.461327), ""));
wayList.add(new Poi("华润大厦", new LatLng(39.912914,116.434247), ""));
AmapNaviPage.getInstance().showRouteActivity(context, new AmapNaviParams(start, wayList, end, AmapNaviType.DRIVER), naviInfoCallback);

传入起点、终点启动导航组件路线规划页示例:

Poi start = new Poi("三元桥", new LatLng(39.96087,116.45798), "");
/**终点传入的是北京站坐标,但是POI的ID "B000A83M61"对应的是北京西站,所以实际算路以北京西站作为终点**/
Poi end = new Poi("北京站", new LatLng(39.904556, 116.427231), "B000A83M61");
AmapNaviPage.getInstance().showRouteActivity(context, new AmapNaviParams(start, null, end, AmapNaviType.DRIVER), naviInfoCallback);

直接启动导航组件导航页示例:

启动导航页和路线规划页的区别在于showRouteActivity方法中增加传AmapPageType.NAVI参数;

 Poi start = new Poi("三元桥", new LatLng(39.96087,116.45798), "");
/**终点传入的是北京站坐标,但是POI的ID "B000A83M61"对应的是北京西站,所以实际算路以北京西站作为终点**/
/**Poi支持传入经纬度和PoiID,PoiiD优先级更高,使用Poiid算路,导航终点会更合理**/
Poi end = new Poi("北京站", new LatLng(39.904556, 116.427231), "B000A83M61");
AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), new AmapNaviParams(start, null, end, AmapNaviType.DRIVER, AmapPageType.NAVI), naviInfoCallback);

启动货车导航组件

以下内容从导航SDK v6.0.0起开始支持

如果您需要使用货车导航组件,请您通过AMapCarInfo方法设置货车对应的参数,并按照上文的任意一种方式启动导航组件。

特别注意:货车路径规划目前默认给出的是测试配额,每日调用次数上限100次,QPS上限1,如果您有更高配额要求,请通过工单系统提交商务合作类工单进行商务合作咨询。

调用方式请参考:

AMapCarInfo aMapCarInfo = new AMapCarInfo();
aMapCarInfo.setCarType("1");//设置车辆类型,0小车,1货车
aMapCarInfo.setCarNumber("京DFZ239");//设置车辆的车牌号码. 如:京DFZ239,京ABZ239
aMapCarInfo.setVehicleSize("4");//设置货车的等级
aMapCarInfo.setVehicleLoad("100");//设置货车的载重,单位:吨。
aMapCarInfo.setVehicleWeight("99");//设置货车的自重
aMapCarInfo.setVehicleLength("25");//设置货车的最大长度,单位:米。
aMapCarInfo.setVehicleWidth("2");//设置货车的最大宽度,单位:米。 如:1.8,1.5等等。
aMapCarInfo.setVehicleHeight("4");//设置货车的高度,单位:米。
aMapCarInfo.setVehicleAxis("6");//设置货车的轴数
aMapCarInfo.setVehicleLoadSwitch(true);//设置车辆的载重是否参与算路
aMapCarInfo.setRestriction(true);//设置是否躲避车辆限行。

AmapNaviParams naviParams = new AmapNaviParams(null, null, null, AmapNaviType.DRIVER);
naviParams.setCarInfo(aMapCarInfo);

AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), naviParams, WelcomeActivity.this);

重要参数和方法说明

以下是导航组件AmapNaviParams相对重要的方法介绍,更多参数和方法请您关注参考手册

  • 设置是否使用内置语音,不使用的话,需要自己进行语音合成,语音合成部分详细内容可参考语音合成部分的说明。
 /**
     * 设置是否使用内部语音播报
     * @param isUseInnerVoice 是否使用内部语音播报
     * 注意:6.1.0版本开始,默认值改为true
     * @since 6.0.0
     *
     */
public void setUseInnerVoice(boolean isUseInnerVoice)
  • 设置是否在导航页显示多备选路线
 /**
     * 设置多路线导航模式(导航中拥有若干条备选路线供用户选择), 或单路线导航模式(默认模式). 注意:此方法仅限于在开始导航前调用有效,步行与骑行导航无效,以下情况不会出现多备选路线:
     * 货车导航、路线存在途经点、路线长度超过80KM。
     * @since 6.3.0
     * @param multipleRouteNaviMode true:多路线导航模式, false:单路线导航模式(默认)
     */
public void setMultipleRouteNaviMode(boolean multipleRouteNaviMode) ;
  • 设置启动导航组件是否重新算路,可以外部算完路直接启动组件
/**
     * 设置启动导航组件是否进行算路
     *
     * @param needCalculateRouteWhenPresent 默认 true : 为算路,若设置为false,启动组件以后不会算路直接开启导航,只有在直接跳转导航情况下才生效。
     * @since 5.6.0
     */
public void setNeedCalculateRouteWhenPresent(boolean needCalculateRouteWhenPresent)
  • 设置退出组件的时候是否销毁导航,如果退出后还有导航操作,退出组件的时候不要销毁 
/**
     * 设置退出导航组件是否销毁导航实例
     *
     * @param needDestroyDriveManagerInstanceWhenNaviExit 默认true:为销毁导航实例,若设置为false,退出导航组件以后不会销毁导航。
     * @since 5.6.0
     */
public void setNeedDestroyDriveManagerInstanceWhenNaviExit(boolean needDestroyDriveManagerInstanceWhenNaviExit)
  • 设置导航组件UI主题色
/**
 * 设置组件主题
 *     目前支持的的主题有三种:
 *         蓝色(默认主题):{AmapNaviTheme#BLUE}
 *         白色:{AmapNaviTheme#WHITE}
 *         黑色:{AmapNaviTheme#BLACK}
 * @param theme
 * @return
 * @since 5.5.0
 */
public AmapNaviParams setTheme(AmapNaviTheme theme)

重要回调方法说明

实现 INaviInfoCallback 监听器后可接收如下回调,更多回调方法可查阅参考手册

导航初始化失败时的回调函数:

/**
     * 导航初始化失败时的回调函数
     **/
    onInitNaviFailure()

导航播报信息回调函数:

/**
     * 导航播报信息回调函数。
     * @param text 语音播报文字
     **/
    onGetNavigationText(String text)

GPS位置有更新时的回调函数:

/**
     * 当GPS位置有更新时的回调函数。
     *@param location 当前自车坐标位置
     **/
    onLocationChange(AMapNaviLocation location)

到达目的地后回调函数:

/**
     * 到达目的地后回调函数。
     **/
    onArriveDestination()

启动导航后的回调函数:

/**
     * 启动导航后的回调函数
     **/
    onStartNavi()

算路成功回调:

 /**
     * 算路成功回调
     * @param routeIds 路线id数组
     */
    onCalculateRouteSuccess(int[] id)

路径规划失败后的回调函数:

/**
     * 步行或者驾车路径规划失败后的回调函数
     **/
    onCalculateRouteFailure(int errorCode)

停止语音回调,收到此回调后可以停止播放语音,用于自定义语音播报模块:

/**
     * 停止语音回调,收到此回调后用户可以停止播放语音
     **/
    onStopSpeaking()

注意

1、导航组件不能与非导航组件API在同一个app中同时生效。

2、导航组件支持货车导航,获取更多流量请通过工单系统进行商务合作咨询。

      

示例中心 功能
在线体验
常见问题