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

