路线选择-Android 最后更新时间: 2020年12月15日
乘客端选择路线
注意:从司乘同显3.0.0版本开始,支持乘客端在 行程前 和 行程中 设定司机送乘客的路线 8.1 司机端 司机端需要打开下面两个开关,乘客端才能正常路线选择:
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() {
@Override
public boolean onSelectRoute(List<NaviPathInfo> naviPathInfos) {
Log.e("amap_sctx", "SelectRoutManager onSelectRoute:" + (naviPathInfos == null));
//回调备选路线信息,详情参考NaviPathInfo 参数介绍
return false;
}
@Override
public void onFocusRoute(NaviPathInfo naviPathInfo) {
if (naviPathInfo != null) {
// 回调被选中的备选路线信息
Log.e("amap_sctx", "路线高亮切换成功: " + currentRouteId);
}
}
@Override
public void onError(final int errorCode, final String message) {
if (errorCode == 0) {
// 选路成功
}
Log.e("amap_sctx", "onError: " + errorCode + " " + message + " currentRouteId " + currentRouteId);
//选择路线状态回调,包含选择路线成功或者失败,具体参考 SCTXConfig 类里定义的错误码
}
});
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();
3、效果预览
行程前选路
行程中选路
司机端路线选择
注意: 司乘同显从2.3.1版本之后支持司机端路线切换,司机端在每次算路成功时,会回调2-3条路线信息供用户选择
1.设置路线回调监听
//路线信息回调
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;
}
});
2.选定路线
通过下面接口设置路线的routeId,司机端路线会立即生效。
//选定路线
mDriverRouteManager.selectRoute(naviPathInfo.getRouteId());