You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HERE iOS Premium SDK语音导航英里/英尺单位配置问题

解决HERE iOS Premium SDK美式单位语音导航问题

你找的方向没错——美式单位(英里/英尺)的语音播报确实依赖对应地区的语音包,但在语音包的获取和配置环节可能还有遗漏,我来帮你梳理完整的解决步骤:

1. 筛选并获取美式英语语音包

NMAVoiceCatalog返回语音包数量少,大概率是因为默认只加载了基础语音资源,你需要在更新完成后主动筛选美式英语(en-US)的语音条目:

  • 在voiceCatalog(_ catalog: NMAVoiceCatalog, didFinishUpdatingWith voices: [NMAVoice]?)代理方法中,遍历返回的voices列表,找到语言代码为en-US的语音(通常ID格式类似en-US-male-1或en-US-female-1)。
  • 如果列表里没有美式语音包,先检查HERE开发者后台的配置:确认已开启对应语音资源的权限,或者当前SDK版本是否包含该地区的语音包。

2. 下载并设置目标语音包

找到美式语音包后,执行下载并将其设为当前导航语音:

// 遍历语音列表筛选美式英语语音
if let targetVoice = voices?.first(where: { $0.languageCode == "en-US" }) {
    // 检查语音包状态,已下载则直接设置
    if targetVoice.state == .downloaded {
        voiceCatalog?.setVoice(targetVoice, completion: { error in
            if let error = error {
                print("语音设置失败: \(error.localizedDescription)")
            } else {
                print("成功切换为美式英语语音")
            }
        })
    } else {
        // 未下载则启动下载流程
        voiceCatalog?.downloadVoice(targetVoice, progress: { progress in
            print("语音包下载进度: \(progress)%")
        }, completion: { error in
            guard error == nil else {
                print("语音包下载失败: \(error!.localizedDescription)")
                return
            }
            // 下载完成后设置语音
            self.voiceCatalog?.setVoice(targetVoice, completion: nil)
        })
    }
}

3. 显式配置导航单位系统(关键补充)

即使使用了美式语音包,建议主动设置导航的单位偏好为英制,确保播报和显示的单位统一:

if let navManager = NMANavigationManager.sharedInstance() {
    navManager.preferredUnitSystem = .mile
}

常见问题排查

  • 若NMAVoiceCatalog始终仅返回1个语音包:尝试清理SDK缓存后重新调用update(),同时检查设备网络连接(语音包列表需要联网获取)。
  • 播报仍使用公制单位:确认选中的语音包确实是en-US地区的,同时检查preferredUnitSystem是否正确设置为.mile。

内容的提问来源于stack exchange,提问作者Peter Fabry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:01:12