Skip to content

快速开始

功能介绍

本文给出 EHService 的最小可运行接入流程:

  1. 初始化 SDK
  2. 创建 EHDataServiceEHMessageService
  3. 注册监听器并消费回调
  4. 退出时释放资源

详细能力请继续阅读 EH数据服务EH消息服务

1) 初始化 SDK

EHService 依赖 SDK 基础能力,必须先初始化:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
val sdkOptions = SDKOptions.builder()
    .setSdkDataDir("/sdcard/YourMapDataPath")
    .setRegion(Region.EU.name)
    .build()

val navSDKOptions = NavSDKOptions.builder(sdkOptions)
    .enableDownloadMapData(false)
    .build()

SDK.getInstance().initialize(application, navSDKOptions)

2) 创建服务

2.1 创建 EHDataService(结构化数据)

1
2
3
4
5
6
7
8
val ehDataService = EHService.Factory.createEHDataService(
    EHServiceOption.Builder()
        .setServiceMode(EHServiceMode.STANDALONE)
        .setMainPathLength(5000)
        .setIntersectionDetectDistance(2000)
        .setSubPathLevel(0)
        .build()
)

2.2 创建 EHMessageService(二进制消息)

1
2
3
4
5
6
7
val ehMessageService = EHService.Factory.createEHMessageService(
    EHServiceOption.Builder()
        .setServiceMode(EHServiceMode.STANDALONE)
        .setMainPathLength(5000)
        .setPositionMessagePeriod(1000) // ms
        .build()
)

3) 注册监听器

3.1 EHDataService

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
val dataListener = object : EHDataListener {
    override fun onPathUpdated(path: EHPath) {
        // 处理 MPP / sub path 等结构化路径信息
    }

    override fun onPositionUpdated(positions: List<EHPosition>) {
        // 处理当前位置候选(按置信度降序)
    }
}

ehDataService.addEHDataListener(dataListener)

3.2 EHMessageService

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
val messageListener = EHMessageListener { messages ->
    // messages[i].data 是 64-bit 原始 EH message
}

val locationListener = EHLocationListener { feedback ->
    // DR 校准反馈(坐标、航向、置信度等)
}

ehMessageService.addEHMessageListener(messageListener)
ehMessageService.addEHLocationListener(locationListener)

4) 释放资源

建议先移除监听器,再 dispose()

1
2
3
4
5
6
ehDataService.removeEHDataListener(dataListener)
ehDataService.dispose()

ehMessageService.removeEHMessageListener(messageListener)
ehMessageService.removeEHLocationListener(locationListener)
ehMessageService.dispose()

应用整体退出时再调用:

1
SDK.getInstance().dispose()

注意事项

  • 同一个 listener 不应重复添加(内部按集合去重管理)。
  • 服务实例 dispose() 后不可复用,需要重新创建。
  • 回调线程由 SDK 内部分发,涉及 UI 更新请切主线程。