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

Mavic Air中DJIFlightControllerParamIsFlying监听未触发问题咨询

解决Mavic Air上DJIFlightControllerParamIsFlying监听未触发的问题

我来帮你排查这个监听没被调用的问题,大概率是几个常见的配置环节没做好,你可以逐一检查:

  • 确认SDK初始化与设备连接状态
    监听飞行状态的前提是DJISDK完成初始化、设备与Mavic Air成功连接,且能获取到DJIFlightController实例。你可以在添加监听前加个校验:

    guard let flightController = DJISDKManager.product()?.flightController else {
        Logger.sharedLogger.log(message: "Flight controller not available", event: "Error", fileName: #file, line: #line, funcName: #function)
        return
    }
    

    另外还要确保你的App已经通过DJI SDK的授权验证,未授权的话多数API都无法正常工作。

  • 绑定Key到具体的FlightController实例
    你当前创建Key的方式没问题,但有时候全局创建的Key可能没关联到具体的FlightController,导致监听失效。可以尝试关联实例创建Key:

    let flyingKey = DJIFlightControllerKey(param: DJIFlightControllerParamIsFlying, for: DJISDKManager.product()?.flightController)
    
  • 保证监听器对象的生命周期
    如果你的监听器是某个ViewController或自定义对象,要确保它在监听期间没有被销毁。比如如果在ViewController的viewDidLoad中添加监听,但ViewController被pop或dismiss了,监听就会失效。可以考虑将监听器的生命周期与App绑定,或者用合适的引用方式避免提前释放(注意避免循环引用,必要时用weak self)。

  • 主动请求初始值验证通路
    部分Key添加监听后不会自动触发初始值回调,你可以在添加监听后主动请求一次当前状态,验证通路是否正常:

    DJISDKManager.keyManager()?.getValueFor(flyingKey!, withCompletion: { (value: DJIKeyedValue?, error: Error?) in
        if let error = error {
            Logger.sharedLogger.log(message: "Failed to get flying status: \(error.localizedDescription)", event: "Error", fileName: #file, line: #line, funcName: #function)
        } else {
            Logger.sharedLogger.log(message: "Current flying status: \(value?.boolValue ?? false)", event: "Notice", fileName: #file, line: #line, funcName: #function)
        }
    })
    

    如果主动请求也失败,说明连接或授权环节存在问题。

  • 检查固件与SDK版本兼容性
    旧版本的Mavic Air固件可能对部分Key的支持不完善,建议将飞行器固件升级到官方最新版本,同时确保使用的DJI SDK版本与固件版本兼容(优先使用最新版SDK)。

内容的提问来源于stack exchange,提问作者Steve Conley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:07