Перейти к основному содержимому

Передача навигационных данных

Создайте NavigationInfoModel для текущего этапа маршрута и передайте его устройству.

Предварительные условия

  • Устройство подключено и поддерживает TurnByTurnNavigationAPI.
  • Размер каждого из полей instruction и roadName не превышает 128 байт.
  • Расстояния и время указаны в единицах, описанных моделью.

Справочник API

Фреймворк

AIBuds.xcframework

Протокол

Swift
/// Turn by turn navigation API
protocol TurnByTurnNavigationAPI: DeviceAPI {
    /// Send navigation info
    /// - Parameters:
    ///   - info: Navigation info
    ///   - completion: A closure that is called when the operation completes.
    ///     - success: `true` if the operation was successful; otherwise `false`.
    ///     - statusCode: The status code returned by the device. `nil` if the operation failed.
    ///     - error: An `NSError` object that describes the error that occurred, or `nil` if the operation was successful.
    func sendNavigationInfo(
        _ info: NavigationInfoModel,
        completion: AIBudsStatusCodeCompletionHandler?
    )
}

См. sendNavigationInfo в справочнике API.

Модель навигации

СвойствоНазначение
nextStepDistanceTextГотовый к отображению текст, например 300m или 1.5km.
maneuverИсходное значение из раздела Навигационные манёвры.
instructionТекст указания размером до 128 байт.
roadNameНазвание дороги размером до 128 байт.
alertInfoНеобязательная модель NavigationAlertInfoModel; значения и правила параметров приведены в разделе Навигационные предупреждения.
mapProviderИсходное значение из NavigationMapProvider.
transportModeИсходное значение из NavigationTransportMode.
remainingTimeОставшееся время в секундах.
remainingDistanceОставшееся расстояние в метрах.

Примеры использования

Swift
guard let device = device as? TurnByTurnNavigationAPI else { return }

let info = NavigationInfoModel()
info.nextStepDistanceText = "300m"
info.maneuver = NSNumber(value: NavigationManeuver.right.rawValue)
info.instruction = "Turn right"
info.roadName = "Market Street"
info.remainingTime = 420
info.remainingDistance = 1800

device.sendNavigationInfo(info) { success, statusCode, error in
    guard success else {
        print(error?.localizedDescription ?? "Navigation update failed")
        return
    }
    print("Navigation sent: \(statusCode?.stringValue ?? "Unavailable")")
}

Обработка ошибок

Перед отправкой проверяйте ограничения по размеру. Основным результатом считайте success и сохраняйте statusCode устройства; значения отдельных кодов состояния в открытом SDK пока не описаны.