Skip to content

司乘同显接入

接入司乘同显前请确保司机端接入 GPS 点串流 SDK,具体请参考《Android GPS 点串流上报 SDK》。

创建 DSyncTripOpenInfo

首先司乘同显构建必要的一订单信息的基本信息:

java
DSyncTripOpenInfo info = new DSyncTripOpenInfo.Builder()
    .thirdPartyUid("司机id")          // 订单来源第三方时必填,这里设置的是司机 id
    .thirdPartyOid("第三方订单id")     // 订单来源第三方时必填,订单 id
    .orderSource("订单来源")           // 必填,订单来源第三方请设置 DSyncTripOpenInfo.THIRD_PARTY
    .openUid("司机id")                 // 订单来源是滴滴时必填,司机 id
    .openOid("订单id")                 // 订单来源是滴滴时必填
    .build();

创建 DSyncTripInitParams

提供构建司乘同显管理类的必须参数:

java
DSyncTripInitParams params = new DSyncTripInitParams.Builder()
    .startPinResId(startPinResId)                  // 起点资源图片 id,必填
    .endPinResId(endPinResId)                      // 终点资源图片 id,必填
    .dSyncTripOpenInfo(info)                       // 必填,具体看「创建 DSyncTripOpenInfo」
    .orderStartAddressName(startAddrName)          // 必填
    .orderEndAddressName(endAddressName)           // 必填
    .passengerPhoneNum(passengerPhoneNum)          // 必填
    .showWalkLine(false)                           // 是否展示步行引导线,选填,默认关闭
    .build();

创建入参 DSyncTripOrderProperty

java
DSyncTripOrderProperty orderProperty = new DSyncTripOrderProperty();
orderProperty.orderId = "订单id";                                       // 必传
orderProperty.orderStage = DSyncTripConstant.ORDER_STAGE.ON_TRIP;        // 必填,订单状态
                                                                         // ON_TRIP 是行程中,如果是等待接驾段设置 WAIT_FOR_PICK
orderProperty.token = "乘客登录后的token信息";                            // 必填
orderProperty.driverId = "司机的唯一标识id";                              // 必填
orderProperty.passengerPhone = "乘客手机号";                              // 必填
orderProperty.orderStartPosition = new LatLng(startLat, startLng);       // 必填,订单起点经纬度
orderProperty.orderDestPosition = new LatLng(endLat, endLng);            // 必填,订单终点经纬度

创建司乘同显控制类、开启司乘同显

java
DSyncTripManager mDSyncTripManager = new DSyncTripManager(
    ctx,                                  // Context,必填
    mapView,                              // 地图实例,必填
    DSyncTripType.NORMAL_SYNC_TRIP,       // 司乘同显类型,必填
    params);                              // 必填,具体参考「创建 DSyncTripInitParams」

创建完 DSyncTripManager 实例对象后,请先设置一些必要的参数信息再开启司乘同显:

java
// 订单信息,如果订单状态有改变,请实时调用刷新
mDSyncTripManager.setSyncTripOrderProperty(orderProperty);
// 设置小车 Marker 资源图
mDSyncTripManager.setCarMarkerBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.car));
// 设置司乘同显时页面左上右下的间距,主要用来做最佳 view,保证路线和小车在视野范围内
mDSyncTripManager.setNavigationLineMargin(left, top, right, bottom);
// 设置路线数据更新的回调,主要用来更新 ETA、EDA 信息
mDSyncTripManager.setRouteChangedCallback(new IRouteChangedCallback() {
    @Override
    public void onRouteChanged() {
        // 主要用来更新 ETA、EDA 信息
    }
});
// 获取小车 Marker,通过 Marker 的 showInfoWindow 方法可以显示自定义气泡
mDSyncTripManager.getCarMarker(new ICarMarkerCallback() {
    @Override
    public void onCarMarkerAdd(Marker carMarker) {
        // 获取小车 marker 添加的时机和 marker 对象
    }

    @Override
    public void onCarMarkerRemove() {
        // 获取小车 marker 移除的时机
    }
});
// 启动司乘同显
mDSyncTripManager.startSyncTrip();

停止司乘同显

如果需要停止司乘同显请调用以下方法:

java
mDSyncTripManager.stopSyncTrip();

销毁司乘同显

如果已经不再需要司乘同显且需要释放资源,请调用如下方法:

java
mDSyncTripManager.onDestroy();

marker 上添加 InfoWindow 示例

当路线刷新时,ETA 和 EDA 也会跟着改变,如果需要在小车上方使用 infoWindow 展示对应信息,可以参考如下示例代码设置:

java
carMarker.setAnchor(0.5f, 0.5f);
carMarker.setInfoWindowAdapter(new DiMap.InfoWindowAdapter() {
    @Override
    public View getInfoWindow(Marker marker) {
        // 创建气泡上方 infoWindow 上需要展示的信息
        return null;
    }
});
if (!carMarker.isInfoWindowEnable()) {
    carMarker.setInfoWindowEnable(true);
}
if (!carMarker.isInfoWindowShown()) {
    carMarker.showInfoWindow();
}

针对 marker 中添加 infoWindow 具体可参考《Android 地图 SDK》中的 API 文档。

司乘同显常用接口

java
mDSyncTripManager.isSyncTripRunning();   // 判断司乘同显是否开启
mDSyncTripManager.getLeftEtaStr();       // 获取 ETA(预估剩余时间)信息
mDSyncTripManager.getLeftDistance();     // 获取 EDA(预估剩余距离)信息
mDSyncTripManager.onPause();             // 当司乘同显页面切到后台调用
mDSyncTripManager.onResume();            // 当司乘同显页面切到前台后调用
mDSyncTripManager.modifyBestView();      // 调整最佳 view

更多接口请参考 API 文档。