开发 出行解决方案参考手册 客户端相关服务 行程中 司乘同显-Android

司乘同显-Android 最后更新时间: 2020年12月15日

快速接入

1.获取Key

1.创建新应用

进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。


2.添加新key

在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码  SHA1、调试版安全码 SHA1、以及 Package,如下图所示:

需要注意的是: 1个KEY只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。

在阅读完高德地图API服务条款后,勾选此选项,点击“提交”,完成 Key 的申请,此时您可以在所创建的应用下面看到刚申请的 Key 了。


3.开通权限

需要联系高德对应接口人开通司乘同显相关权限


4.配置key

在AndroidManifest.xml 的 application 标签下加入如下内容:

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">
//开发者申请的key  
</meta-data>


2.集成SDK包

1.添加库文件

拷贝jar+so到工程libs文件夹下:


2.gradle配置

配置so路径,打开build.gradle,找到 sourceSets 标签,在里面添加如下配置:

main {
    jniLibs.srcDirs = ['libs']
}

3.快速接入

1.司机端 

1.1. 创建DriverRouteManager

1) 初始化资源,更多设置可以参考RouteOverlayOptions的接口说明:

// 实例司乘同显 参数类
RouteOverlayOptions options = new RouteOverlayOptions();
// 设置 小车图标
options.carIcon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car));
// 设置 起点图标
options.startPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_start));
// 设置终点图标
options.endPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_end));


2)创建DriverRouteManager

DriverRouteManager driverRouteManager = new DriverRouteManager(context, aMap, options);


1.2.设置订单信息 

1)创建OrderProperty

//设置订单类型(普通、拼车)及订单ID 
OrderProperty orderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_NORMAL, OrderId);


2)设置OrderProperty

//设置orderProperty、上车点坐标、目的地坐标
driverRouteManager.setOrderProperty(orderProperty, new LatLng(39.992932, 116.479262), new LatLng(39.993343, 116.474574));

1.3.切换订单状态 

1)订单状态类型,参考(com.amap.sctx.SCTXConfig)

SCTX_ORDER_STATUS_UNSPECIFIED = 0;//未知状态
SCTX_ORDER_STATUS_PICKUPPASSENGER = 1;//去接乘客
SCTX_ORDER_STATUS_WAITPASSENGER = 2;//等待乘客上车
SCTX_ORDER_STATUS_PASSENGERONBOARD = 3;//乘客以上车
SCTX_ORDER_STATUS_ORDERCOMPLETE = 4;//订单结束
SCTX_ORDER_STATUS_OFFLINE = 5;//离线状态,只走降级策略获取司机位置,内部不做其他请求


2)订单状态切换

driverRouteManager.setOrderState(SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER);


1.4.销毁 

//释放资源
driverRouteManager.destroy();


2.乘客端

2.1.创建PassengerRouteManager 

1) 初始化资源,更多设置可以参考RouteOverlayOptions的接口说明:

// 实例司乘同显参数类
RouteOverlayOptions options = new RouteOverlayOptions();
// 设置小车图标
options.carIcon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car));
// 设置起点图标
options.startPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_start));
// 设置终点图标
options.endPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_end));


2)创建PassengerRouteManager

PassengerRouteManager passengerRouteManager = new PassengerRouteManager(this, aMap, options);


2.2 设置订单信息 

1)创建OrderProperty

//设置订单类型(普通、拼车)及订单ID 
OrderProperty orderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_NORMAL, OrderId);


2)设置OrderProperty

//设置orderProperty、上车点坐标、目的地坐标
passengerRouteManager.setOrderProperty(orderProperty, new LatLng(39.992932, 116.479262), new LatLng(39.993343, 116.474574));


2.3 切换订单状态 

passengerRouteManager.setOrderState(SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER);


2.4 销毁 

//释放资源
passengerRouteManager.destroy();



4.效果预览

高级功能

功能1: 调起导航能力 

1.调起导航组件

在接乘客和送乘客阶段可以调起高德导航组件进行导航:

需要在AndroidManifest.xml里注册AmapRouteActivity

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


调用DriverRouteManager的startNavi方法开启导航:

DriverRouteManager.NaviParams naviParams = new DriverRouteManager.NaviParams();
//调起导航是否重新算路,正常不需要重新算路,会直接使用当前司乘同显界面展示的路线
naviParams.setNeedCalculateRoute(false);
//是否开启路况
naviParams.setTrafficEnable(true);
//是否使用内置语音
naviParams.setUseInnerVoice(true);
//是否开启多备选路线
naviParams.setMultipleRouteNaviMode(true);
/**
* 调起导航组件,开启导航
* @param context 上下文
* @param callback 导航信息回调
* @param params 导航组件初始化参数
*/
myDriverRouteManager.getDriverRouteManager().startNavi(this, new INaviInfoCallback() {
/**
* 导航初始化失败时的回调函数。
*/
@Override
public void onInitNaviFailure() {}

/**
* 导航播报信息回调函数。
* @param s 播报文字
*/
@Override
public void onGetNavigationText(String s) {}

/**
* 当GPS位置有更新时的回调函数。
* @param aMapNaviLocation  当前位置的定位信息。
*/
@Override
public void onLocationChange(AMapNaviLocation aMapNaviLocation) {}

/**
* 到达目的地后回调函数。
* @param b true代表是模拟导航到达目的地,false代表实时导航到达目的地
*/
@Override
public void onArriveDestination(boolean b) {}

/**
* 启动导航后的回调函数
* @param i 导航类型参见NaviType
*/
@Override
public void onStartNavi(int i) {}

/**
* 算路成功回调
* @param ints 路线id数组
*/
@Override
public void onCalculateRouteSuccess(int[] ints) {}

/**
* 驾车路径规划失败后的回调函数。
* @param errorInfo  参见PathPlanningErrCode
*/
@Override
public void onCalculateRouteFailure(int errorInfo) {}

/**
* 停止播报回调
*/
@Override
public void onStopSpeaking() {}

/**
* 重新规划的回调
* @param type 参见ReCalculateRouteType
*/
@Override
public void onReCalculateRoute(int type) {}

/**
* 退出组件或退出组件导航的回调函数
* @param pageType 参见PageType
*/
@Override
public void onExitPage(int pageType) {}

/**
* 切换算路偏好回调
* @param strategy 切换后偏好 参见PathPlanningStrategy
*/
@Override
public void onStrategyChanged(int strategy) {}

/**
* 获取导航地图自定义View,该View在导航整体界面的下面,注意要设置setLayoutParams并且设置高度
*/
@Override
public View getCustomNaviBottomView() {
return null;
}

/**
* 获取导航地图自定义View,该View在导航界面的当前路名位置,使用该方法以后,将不会显示当前路名
*/
@Override
public View getCustomNaviView() {
return null;
}

/**
* 驾车路径导航到达某个途经点的回调函数。
* @param wayID 到达途径点的编号,标号从0开始,依次累加。
*/
@Override
public void onArrivedWayPoint(int wayID) {}

/**
* 组件地图白天黑夜模式切换回调
* @param mapType 枚举值参考AMap类,3 黑夜,4 白天
*/
@Override
public void onMapTypeChanged(int mapType) {}
}, naviParams);


运行效果


2.使用自定义导航View(AMapNaviView)

1)对导航界面自定义要求比较高的情况下可以参考导航UI定制化介绍

2.)注意事项:

  • 启动自定义导航界面时,无需调用 AMapNavi.startNavi(),司乘同显内部会startNavi。
  • 退出导航界面时,务必不要调用 AMapNavi.stopNavi()及 AMapNavi.destroy(),司乘同显会依赖AMapNavi的状态。


功能2: POI算路

1.背景

在出行的业务场景中,乘客设置的终点是否合理,比如乘客可能通过拖动地图选取的终点,这样会导致终点坐标会有很大误差,导致路线规划不合理,可能无法正常到达,建议使用Poiid算路接口,这样能确保导航规划的路线终点是一个可到达的点。

2.具体实现

//上车点信息,经纬度必须填,否则起点图标不显示
LatLng pickUpLatLng = new LatLng(39.722147,116.345131);
Poi pickUpPosition = new Poi("大兴桥",pickUpLatLng,"B0FFFAAA98");
//目的地信息,经纬度必须填,否则终点图标不显示
LatLng endLatLng = new LatLng(39.944304,116.482534);
/**Poi支持传入经纬度和PoiID,PoiiD优先级更高,使用Poiid算路,导航终点会更合理**/
Poi endPosition = new Poi("朝阳公园",endLatLng,"B000A7CA07");
//初始化订单信息
OrderProperty orderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_NORMAL, mOrderId);
mDriverRouteManager.setOrderProperty(orderProperty,pickUpPosition, endPosition,null);


3.效果对比

                           未使用POIID   

                           使用POIID 


功能3: 变更上车点/途径点/目的地

1.变更上车点只能限定在接乘客阶段,具体实现方法:

//德胜门
LatLng newCenter = new LatLng(39.949921,116.379357);
//修改上车点,只在 接乘客 阶段设定有效
mPassengerRouteManager.setStartPosition(newCenter);


2.变更成功或者失败均会在PassengerRouteCallback.onError中回调,具体错误码为:

/**
 * 变更上车点成功
 * @since 2.4.2
 */
public final static int SCTX_ERROR_STARTPOSITION_UPDATE_SUCCESS= 1012;
/**
 * 变更上车点失败
 * @since 2.4.2
 */
public final static int SCTX_ERROR_STARTPOSITION_UPDATE_FAILED = 1013;


3.运行效果


功能4: 覆盖物样式自定义

司乘同显覆盖物(车、路线、起终点)样式均通过RouteOverlayOptions来控制,具体参数介绍: 

/**
 * 设置起点图标
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions startPointIcon(BitmapDescriptor bitmapDescriptor)
/**
 * 设置终点图标
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions endPointIcon(BitmapDescriptor bitmapDescriptor)
/**
 * 设置小车图标
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions carIcon(BitmapDescriptor bitmapDescriptor)
/**
 * 设置默认轨迹线填充纹理
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions defaultRouteRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置步行轨迹线填充纹理
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions walkRouteRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--畅通
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions smoothTrafficRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--缓慢
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions slowTrafficRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--拥堵
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions jamTrafficRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--严重拥堵
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions veryJamTrafficRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--未知路况
 * @param bitmapDescriptor
 * @return
 * @since 1.0.0
 */
public RouteOverlayOptions unknownTrafficRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--畅通,未选中状态
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.4.0
 */
public RouteOverlayOptions smoothTrafficUnSelectRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--缓慢,未选中状态
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.4.0
 */
public RouteOverlayOptions slowTrafficUnSelectRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--拥堵,未选中状态
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.4.0
 */
public RouteOverlayOptions jamTrafficUnSelectRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--严重拥堵,未选中状态
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.4.0
 */
public RouteOverlayOptions veryJamTrafficUnSelectRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置路况轨迹线填充纹理--未知路况,未选中状态
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.4.0
 */
public RouteOverlayOptions unknownTrafficUnSelectRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置走过的路填充纹理
 *
 * @param bitmapDescriptor
 * @return
 * @since 2.0.0
 */
public RouteOverlayOptions passedTraceRes(BitmapDescriptor bitmapDescriptor)
/**
 * 设置普通途经点图片资源
 * @param normalWayPointDescriptor
 * @return
 * @since 2.3.0
 */
public RouteOverlayOptions setNormalWayPointDescriptor(BitmapDescriptor normalWayPointDescriptor)
/**
 * 设置上车途经点图片资源(拼车)
 *
 * @param startWayPointDescriptor
 * @since 2.0.0
 */
public RouteOverlayOptions setStartWayPointDescriptor(BitmapDescriptor startWayPointDescriptor)
/**
 * 设置下车途经点图片资源(拼车)
 *
 * @param endWayPointDescriptor
 * @since 2.0.0
 */
public RouteOverlayOptions setEndWayPointDescriptor(BitmapDescriptor endWayPointDescriptor)

注意:如果有司乘同显地图界面退出重新进入的场景,建议在调用 DriverRouteManager.setMap前重新初始化一下RouteOverlayOptions里的图片资源,因为地图在退出销毁时同时会销毁这些图片。 


功能5: 历史轨迹展示

1.司机位置同步

合作方可根据业务实际情况,按照2s~5s的固定频率通过此接口上传车辆位置、状态等信息。

对应接口:http://tsapi.amap.com/v1/data/vehicle?key=

详情可以参考:http://mobility.amap.com/doc/mobility-reference/server/others/vdc


2.历史轨迹展示

2.1.行程中

1)初始化新增轨迹服务相关设置,具体写法:(以司机端为例,乘客端写法相同)

//初始化订单信息
OrderProperty orderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_NORMAL, mOrderId);
//设置轨迹服务id,客户可与接口人咨询,sid与key有绑定关系
orderProperty.setServiceId("1786");
mDriverRouteManager.setOrderProperty(orderProperty, new LatLng(39.985507, 116.400596),    new LatLng(39.944304,116.482534));
//设置行程开始时间,即送驾开始的时间节点
mDriverRouteManager.setServiceStartTime(1556002138000L);
//开启行程中显示历史轨迹
mDriverRouteManager.setDrawPassedTrace(true);


2)运行效果


2.2.行程结束

1)行程结束用户可以通过轨迹查询接口直接查询历史轨迹进行展示,具体实现:(参考Demo里TraceOverlayActivity类)

/**
 * 历史轨迹查询
 */
private void doQueryTrace() {
    //查询入参:订单号、轨迹服务id、查询轨迹段开始时间、查询轨迹段结束时间
    SCTXTraceQuery query = new SCTXTraceQuery("P1111111118","1786",1554718849000L,1554719689000L);
    SCTXTraceSearch sctxTraceSearch = new SCTXTraceSearch(TraceOverlayActivity.this,query);
    //查询结果回调
    sctxTraceSearch.setOnTraceSearchListener(new SCTXTraceSearch.OnTraceSearchListener() {
        @Override
        public void onTraceSearched(SCTXTraceResult result, int errorCode) {
            Log.e(TraceOverlayActivity.class.getName(),"onTraceSearched errorCode:"+errorCode);
            if(result != null){
                Log.e(TraceOverlayActivity.class.getName(),"onTraceSearched result trace size:"+result.counts);
                //绘制历史轨迹
                showTraceOverlay(result);
            }
        }
    });
    //发起查询
    sctxTraceSearch.searchTraceAsyn();
}
/**
 * 历史轨迹展示,对应Overlay已经在Demo里开源具体参考 TraceOverlayActivity
 * @param result
 */
private void showTraceOverlay(SCTXTraceResult result) {
    SCTXTraceOverlayOptions overlayOptions = new SCTXTraceOverlayOptions();
    //设置路线填充纹理
    overlayOptions.setTraceLineDescriptor(BitmapDescriptorFactory.fromResource(R.drawable.amap_sctx_lbs_custtexture));
    //设置起点图标
    overlayOptions.startPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_start));
    //设置终点图标
    overlayOptions.endPointIcon(BitmapDescriptorFactory.fromResource(R.drawable.amap_end));
    //设置路线宽度
    overlayOptions.setTraceLineWidth(40);
    //设置缩放padding
    overlayOptions.margin(100,100,100,100);
    mTraceOverlay = new SCTXTraceOverlay(TraceOverlayActivity.this,mMap,overlayOptions,result,new LatLng(39.903363,116.473913),new LatLng(39.97715,116.417458));
    //绘制历史轨迹
    mTraceOverlay.addToMap();
    //缩放到最佳视野
    mTraceOverlay.zoomToSpan();
}


2)运行效果 

 备注:历史轨迹是使用司机端实际上传的位置点进行纠偏抓路处理后的,效果取决于上传点的质量(精度、速度、方向等),如果实际效果与真实轨迹相差太大,很大可能是上传的点有问题,如丢点严重。可以反馈具体case(sid、订单号、起始时间),高德方面来排查。 


功能6: 拼车场景

1.司机端

拼车单在初始化与普通订单有些区别,如下: 

1.1.初始化订单信息,设定拼车单类型 

/**************初始化订单信息,设置拼车单类型*****************/
OrderProperty driverOrderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_CARSHARING, mOrderId);
mDriverRouteManager.setOrderProperty(driverOrderProperty);


1.2.添加乘客

/***************************添加乘客***********************/
//乘客A上车点信息,类型、用户id、经纬度均要正确填写
WayPointInfo wayPointInfoA1 = new WayPointInfo(WayPointInfo.WayPointType.WAYPOINT_TYPE_PICKUPPOINT, "A", new LatLng(39.993086, 116.474009));
//乘客A目的地信息,类型、用户id、经纬度均要正确填写
WayPointInfo wayPointInfoA2 = new WayPointInfo(WayPointInfo.WayPointType.WAYPOINT_TYPE_DESTINATION, "A", new LatLng(39.968559, 116.418362));
//乘客B上车点信息,类型、用户id、经纬度均要正确填写
WayPointInfo wayPointInfoB1 = new WayPointInfo(WayPointInfo.WayPointType.WAYPOINT_TYPE_PICKUPPOINT, "B", new LatLng(39.959311, 116.453039));
//乘客B目的地信息,类型、用户id、经纬度均要正确填写
WayPointInfo wayPointInfoB2 = new WayPointInfo(WayPointInfo.WayPointType.WAYPOINT_TYPE_DESTINATION, "B", new LatLng(39.948624, 116.41671));
List<WayPointInfo> mWayPointInfos = new ArrayList<WayPointInfo>();
mWayPointInfos.add(wayPointInfoA1);
mWayPointInfos.add(wayPointInfoB1);
mWayPointInfos.add(wayPointInfoA2);
mWayPointInfos.add(wayPointInfoB2);
//设置乘客信息
mDriverRouteManager.setWayPoints(mWayPointInfos); 


1.3.切换订单状态

注意:司机端在拼车场景下只需要切换一次订单状态,即SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER

//切换到接驾状态,拼车单只有一个状态
mDriverRouteManager.setOrderState(SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER);


1.4.乘客状态切换

注意:接到某个乘客或者送达某个乘客时,司机端需要主动移除对应途经点,并重新调用mDriverRouteManager.setWayPoints 重置途经点列表;如果未主动移除,在驶过第一个途经点后会一直偏航重算回到该途经点。


2.乘客端

拼车单在初始化与普通订单有些区别,如下:

2.1.初始化订单信息,设定拼车单类型

//拼车单是依靠主订单号+用户id来关联的,构造参数依次:用户id、上车点、目的地
UserInfo passengerA = new UserInfo("B", SANYUANQIAO = new LatLng(39.959311, 116.453039), new LatLng(39.948624, 116.41671), 0, 0);
//设定拼车订单类型
OrderProperty passengerOrderProperty = new OrderProperty(SCTXConfig.SCTX_ORDER_TYPE_CARSHARING, mOrderId, passengerA);
mPassengerRouteManager.setOrderProperty(passengerOrderProperty);


2.2.设置订单状态

拼车单只有两个订单状态,分别为 SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER(接乘客)和SCTXConfig.SCTX_ORDER_STATUS_PASSENGERONBOARD(送乘客)

//切换到接乘客或者送乘客状态
mPassengerRouteManager.setOrderState(SCTXConfig.SCTX_ORDER_STATUS_PICKUPPASSENGER);


运行效果: 


功能7:司机端选择路线

注意: 司乘同显从2.3.1版本之后支持司机端路线切换,司机端在每次算路成功时,会回调2-3条路线信息供用户选择,具体实现如下


设置路线回调监听//路线信息回调

mDriverRouteManager.setDriverRouteCallback(new DriverRouteManager.DriverRouteCallback() {
    /**
     * @param distance 已行驶距离(暂未实现)
     * @param time 已行驶时间(暂未实现)
     * @param remainingDistance  剩余距离
     * @param estimatedTime  预计时间
     */
    @Override
    public void onRouteStatusChange(float distance, long time, float remainingDistance, long estimatedTime) {
        Log.e("sctx_amap", "remainingDistance:" + remainingDistance + " estimatedTime:" + estimatedTime);
    }
    @Override
    public void onArriveWayPoint(WayPointInfo wayPointInfo) {
        //途经点回调,拼车状态下
    }
    @Override
    public void onArrivePickUpPosition() {
        //到达上车点
    }
    @Override
    public void onArriveDestination() {
        //到达终点
    }
    @Override
    public void onCalculateRouteFailure() {
        //算路失败,建议使用onError ,错误码 1001
    }
    @Override
    public void onError(int errorCode, String message) {
        Log.e("sctx_amap", "errorCode:" + errorCode + "  message:" + message);
    }
    @Override
    public void onCalculateRouteSuccess(int[] ints) {
        //算路成功回调
    }
    /**
     * 算路成功回调所有路线基本信息
     * @param naviPathInfos
     * @return 如果return true 则代表由用户选择路线,需要调用DriverRouteManager.selectRoute(int routeId)选择路线;
     *         return false代表用户不处理,司乘同显内部会选择第一条路线;
     * @since 2.3.1
     */
    @Override
    public boolean onSelectRoute(List<NaviPathInfo> naviPathInfos) {
          //算路成功时回调所有路线信息
       
        return false;
    }
});


选定路线

通过下面接口设置路线的routeId,司机端路线会立即生效。 

//选定路线
mDriverRouteManager.selectRoute(naviPathInfo.getRouteId());


功能8:乘客端选择路线

注意:从司乘同显3.0.0版本开始,支持乘客端在 行程前 和 行程中 设定司机送乘客的路线

 

1.司机端

司机端需要打开下面两个开关,乘客端才能正常路线选择: 

// 开启多备选模式,行程中选路需要开启多备选路线支持
mDriverRouteManager.setMultipleRouteNaviMode(true);
//是否允许乘客端选路
mDriverRouteManager.setAllowingClientChooseRouteEnable(true);


2.乘客端

2.1.获取乘客端选择路线管理类

需要通过mPassengerRouteManager.getPassengerSelectRouteManager() 获取 乘客端路线选择管理类;

//获取乘客端选择路线管理类
PassengerSelectRouteManager mPassengerSelectRouteManager = mPassengerRouteManager.getPassengerSelectRouteManager();
//设定选路界面对应的 AMap 对象,主要是用来绘制对应的覆盖物(起终点、备选路线等)
mPassengerSelectRouteManager.initMap(mMap);


2.2.设置监听

        //设置乘客端选路监听
        mPassengerSelectRouteManager.setPassengerSelectRouteCallback(new PassengerSelectRouteManager.PassengerRouteSelectCallback() {
            /**
             * 算路成功回调所有路线基本信息
             *
             * @param naviPathInfos 所有路线信息
             * @return 如果return true 则代表由用户选择路线,需要调用PassengerRouteManager.selectRoute(int routeId)选择路线;
             * return false代表用户不处理,司乘同显内部会选择第一条路线;
             */
            @Override
            public boolean onSelectRoute(List<NaviPathInfo> naviPathInfos) {
                return false;
            }

            /**
             * 回调被选中路线信息
             * @param naviPathInfo 选中路线信息
             */
            @Override
            public void onFocusRoute(NaviPathInfo naviPathInfo) {}
            
            /**
             * 回调选路状态信息,具体错误码定义参见:SCTXConfig 如司机端路线是否成功切换等,会在此回调中体现
             * @param errorCode 错误码
             * @param message 错误信息
             */
            @Override
            public void onError(final int errorCode, final String message) {}
        });


2.3.开始选路

行车前乘客端选路会实时规划上车点到下车点的路线供选择,选定后,司机端在切换到行程中会使用该路线进行导航;

行程中乘客端选路会依赖司机端同步的多备选路线,切换实时生效;

//开始刷新路线
mPassengerSelectRouteManager.startPassengerSelectRoute(); 


2.4.选定路线

(注意:行程前选择路线后,目的地有变更或者新增途经点,选路均会失效)

//选定某条路线
mPassengerSelectRouteManager.selectRoute(naviPathInfo.getRouteId());


 错误码:(详情参见SCTXConfig) 

/**
 * 乘客端,推送选择路线到司机端成功
 * @since 3.0.0
 */
public final static int SCTX_ERROR_PASSENGER_PUSH_SELECT_ROUTE_SUCCESS = 3003;
/**
 * 乘客端,推送选择路线到司机端失败
 * @since 3.0.0
 */
public final static int SCTX_ERROR_PASSENGER_PUSH_SELECT_ROUTE_FAILED = 3004;
/**
 * 司机端,切换行程前选择路线成功
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_CHANGE_BEFORE_PASSENGERONBOARD_SELECT_ROUTE_SUCCESS = 3005;
/**
 * 司机端,切换行程前选择路线失败
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_CHANGE_BEFORE_PASSENGERONBOARD_SELECT_ROUTE_FAILED = 3006;
/**
 * 司机端,切换行程中选择路线成功
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_CHANGE_AFTER_PASSENGERONBOARD_SELECT_ROUTE_SUCCESS = 3007;
/**
 * 司机端,切换行程中选择路线失败
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_CHANGE_AFTER_PASSENGERONBOARD_SELECT_ROUTE_FAILED = 3008;
/**
 * 该行程有设置途经点,司机端切换路线失败
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_EXISTWAYPOINTS_CHANGE_ROUTE_FAILED = 3010;
/**
 * 乘客端,重算路径与当前一致,请稍后再试
 * @since 3.0.0
 */
public final static int SCTX_ERROR_PASSENGER_REFRESH_SELECT_ROUTE_NO_UPDATE = 3011;
/**
 * 该行程目的地有变更,司机端切换路线失败
 * @since 3.0.0
 */
public final static int SCTX_ERROR_DRIVER_ENDPOSITION_HAS_CHANGE_CHANGE_ROUTE_FAILED = 3012;


2.5.停止选路

//停止选路
mPassengerSelectRouteManager.stopPassengerSelectRoute();


 运行效果 

                         行程前选路  

                        行程中选路 


功能9: 司机端等待乘客状态路线模式(DriverRouteManager)

/**
 * 设置在等待乘客阶段路线展示模式
 * @param routeMode - 展示路线模式,参考常量可以参考SCTXConfig: 
 * 1、SCTXConfig.SCTX_DRIVER_WAITING_ROUTEMODE_PICKUP 展示接乘客路线,默认值 
 * 2、SCTXConfig.SCTX_DRIVER_WAITING_ROUTEMODE_ONBOARD 展示送乘客路线 
 * 3、SCTXConfig.SCTX_DRIVER_WAITING_ROUTEMODE_NOROUTE 不展示路线 
 */
public void showRouteWhileWaitingPassenger(int routeMode)


功能10:司机端设置驶过终点重算距离阈值(DriverRouteManager)

/**
 * 到达圈半径,当司机驶过终点,而没有及时改变订单状态,在驶出该半径范围会立即触发重新算路逻辑
 * @param destinationFenceRadius - 单位:米,默认 200,范围 [50 - 1000]
 */
public void setDestinationFenceRadius(int destinationFenceRadius)


功能11: 乘客端由司机端触发的 上车点/目的地/途经点 变更的回调(SCTXConfig)

//「乘客端」行程前,司机端修改上车点
public static final int SCTX_ERROR_DRIVER_CHANGE_STARTPOSITION

//「乘客端」行程中,司机端修改目的地
public static final int SCTX_ERROR_DRIVER_CHANGE_ENDPOSITION

//「乘客端」行程中,司机端修改途经点
public static final int SCTX_ERROR_DRIVER_CHANGE_WAYPOINTS


功能12:司机端路线选择routeId(乘客端/服务端)回调(DriverRouteManager)

//设置路线选择回调监听
public void setOnSelectRouteListener(DriverRouteManager.OnSelectRouteListener onSelectRouteListener)

 添加 DriverRouteManager.OnSelectRouteListener的接口 

/**
 * 回调选路路线id
 * @param source - 选择路线来源,常量参考可以参考SCTXConfig: 
 * 1、SCTXConfig.SCTX_DRIVER_ONSELECTROUTE_SOURCE_PASSENGER 来源于乘客端选定路线;
 * 2、SCTXConfig.SCTX_DRIVER_ONSELECTROUTE_SOURCE_SERVER 来源于服务端绑定路线;
 */

void onSelectRouteId(java.lang.String routeId,int source)





返回顶部 示例中心 常见问题 智能客服 公众号
二维码