S苏哈出行开发者文档

驾车导航

本页用于汽车实时引导。只查询汽车距离和预览路线时使用驾车路线规划;徒步使用步行导航。

方式一:直接打开 SDK 内置导航页

推荐需要现成导航界面的接入方使用此方式。配置配套 maps-delivery 及其 Maven 依赖,完成 Android Key、服务与数据集元数据。代码只传业务任务和终点,地图、指引、语音和导航服务由 SDK 提供。

package example.docs;
import android.app.Activity;
import cn.sukha.mapsdk.delivery.*;

public final class DrivingPageExample {
    public static void show(Activity host, String taskId, long revision,
                            double latitude, double longitude) {
        DeliveryNaviParams params = DeliveryNaviParams.builder()
            .taskId(taskId).revision(revision)
            .destination(DeliveryPoint.wgs84(latitude, longitude))
            .destinationName("客户选择的收货入口")
            .vehicleType(DeliveryVehicleType.CAR)
            .language("zh-CN").voiceLanguage("zh-CN")
            .voiceEnabled(true).recordJourney(false).build();
        SukhaNaviPage.getInstance().showRouteActivity(host, params);
    }
}

在用户点击导航后调用。taskId、阶段和 revision 来自宿主业务;同一任务改变目的地时递增修订号。示例关闭轨迹记录;这不会自动接入客户的订单上传队列。SDK 软件授权也不会授予平台订单、商家或管理员权限。

首次导航需按系统提示授权精确定位;Android 对通知和前台位置服务的要求由目标系统决定。默认页通过 SDK 自身流程算路和启动,不需要先调用预览 RouteSearch,也不要求宿主复制导航 Activity 实现。

方式二:自定义前台驾车 UI

使用 NavigationClient,按 initialize → onReady → startLocation → 有效位置 → calculateDriveRoute → onCalculateRouteSuccess → 用户 startNavi 的顺序接入。以下类展示状态与资源拥有关系;地图和按钮由宿主提供。

package example.docs;
import android.content.Context;
import java.util.function.Consumer;
import cn.sukha.mapsdk.api.SukhaLatLng;
import cn.sukha.mapsdk.api.SukhaRoute;
import cn.sukha.mapsdk.location.SukhaLocation;
import cn.sukha.mapsdk.navi.services.NavigationClient;

public final class DriveControllerExample implements AutoCloseable {
    private final NavigationClient navi;
    private boolean ready, planned;
    public DriveControllerExample(Context context, Consumer<String> status) {
        navi = new NavigationClient(context);
        navi.setNaviListener(new NavigationClient.Listener() {
            @Override public void onReady(String version) {
                ready = true; navi.startLocation(); status.accept("等待有效定位");
            }
            @Override public void onCalculateRouteSuccess(SukhaRoute route) {
                planned = true; status.accept("路线就绪,可点击开始");
            }
            @Override public void onCalculateRouteFailure(String message) {
                planned = false; status.accept(message);
            }
            @Override public void onError(String code, String message) {
                status.accept(code + ": " + message);
            }
        });
        navi.initialize();
    }
    public void plan(SukhaLatLng destination) {
        SukhaLocation fix = navi.getLastKnownLocation();
        if (!ready || fix == null || fix.getErrorCode() != 0)
            throw new IllegalStateException("等待初始化和有效定位");
        planned = false; navi.calculateDriveRoute(destination);
    }
    public void start() {
        if (!planned) throw new IllegalStateException("先准备驾车路线");
        navi.startNavi();
    }
    public void stop() { navi.stopNavi(); }
    @Override public void close() { navi.close(); }
}

所有调用在主线程进行;创建前先取得相应定位权限。SDK 在真实开始时继续校验位置时间和精度,示例的非空检查不能代替该校验。前台页面离开时停止或关闭;需要锁屏/后台持续运行时改用前台导航服务,不要让 Activity 单独承担后台定位。

自定义界面应监听什么

回调 / 值 用途
onLocationChanged(SukhaLocation) 真实定位或错误,先判断错误码、时间与精度
onNaviInfoUpdate(info) info.progress 提供剩余距离、秒数和指引;按 locationReliable 显示定位状态
info.getDisplaySpeedText() SDK 格式化的 km/h 数值或未知标记,不自行把缺失速度当作 0
info.getSpeedMetersPerSecond() 原始展示速度,单位米/秒;不可用时为 NaN
onCalculateRouteFailure(message) 算路失败;允许用户重试或改选入口
onArriveDestination(side) 到达状态,结束业务操作仍由宿主自己的后台判断

中文、英文、缅文界面及语音的配置见导航总览。SDK 默认导航页跟随宿主实际主题;切换昼夜应通过宿主主题配置或公开地图选项,不修改内部图层或反射私有字段。

导航总览 · 步行导航 · 完整 Android 功能示例下载