SSukha 地图开发者文档

后台导航与路线缓存

选择正确入口

入口 适合场景 需要宿主负责的部分
NavigationClient 自定义前台导航控制 Activity 生命周期、后台运行策略与定位权限
NavigationController 将路线交给 SDK 前台导航服务 在可见 Activity 中绑定、等待就绪、开始导航、管理结束动作
NavigationForegroundService 需要直接接入服务状态和准备流程 服务绑定、有效路线和位置、观察者、平台权限及业务 UI
SukhaMapFragment 使用完整地图与导航界面 提供授权、权限、语言、容器与业务生命周期

控制器调用顺序

  1. 创建 NavigationController(context),设置 NavigationController.Listener。
  2. 调用 initialize(),等待 onReady(...) 和 onServiceReady();两项分别表示数据初始化和服务绑定就绪。
  3. 调用 startLocation(),取得新鲜且符合质量要求的位置。
  4. 调用 calculateDriveRoute(destination, name),等待 onCalculateRouteSuccess(...)。
  5. 从可见 Activity 的用户操作调用 startNavi(NavigationClient.GPSNaviMode)。
  6. 导航服务通过监听器更新剩余路程、位置、到达及状态。
  7. 结束行程调用 stopNavi()。close() 只释放宿主连接,已开始的服务行程可以继续,不能把关闭页面等同于结束导航。

方法的精确签名见 Android 导航服务 API。模拟导航只用于开发验证,不能代替真实 GPS。

Android 运行要求

首次定位前由宿主向用户说明用途,并完成系统要求的运行时定位权限申请。检查合并后的 Manifest 中的前台服务、定位服务类型及对应权限;在可见页面启动服务。不同 Android 系统版本及厂商后台策略不同,需要实际设备验证通知、锁屏和后台定位。

宿主结束业务导航时明确停止行程,释放监听器。不能为了维持服务而隐藏必要通知,也不要把定位失败改写为成功。

缓存导航的使用边界

完整导航流程会准备路线、步骤和沿途所需数据。准备未完成就断网,不能保证完整离线能力。地图画面缓存、路线缓存和可用于重新规划的路网缓存不是同一种资源。

断网后可沿已准备路线继续引导;偏航后全新路线是否可用取决于已缓存路网范围。地点搜索、首次获取路线和未缓存区域的重算仍可能需要网络。授权被明确拒绝、缓存不匹配或失效时按服务状态处理,不绕过授权。

定位不可靠时等待恢复,期间不应继续猜测转弯位置。重新联网或定位恢复后观察实际状态回调,不反复销毁重建导航服务。

多语言

完整 UI 的显示与语音可分别由 SukhaMapConfig.Builder.language、voiceLanguage 指定。服务提供 setLanguage(String)、setVoiceLanguage(String);语言使用 zh-CN、en-US、my-MM。不要把服务方法当成 NavigationClient 的同名方法调用。