MSDK V5 ,如何获得连接飞机失败的回调

Completed

Comments

9 comments

  • 大壮

    0
    Comment actions Permalink
  • DJI Developer Support
    你点击了onProductConnect的链接地址就能跳转到我们的API文档,上面有失败的回调。关于连接成功,你可以看看这篇文章:如何监听无人机以及各个组件的连接状态?(https://sdk-forum.dji.net/hc/zh-cn/articles/8864644851865)
    0
    Comment actions Permalink
  • 大壮

     

    你说的是 onProductDisconnect 这个方法吧, 但是这个方法不符合我的要求啊。

    我想要的是连接失败的回调, 就是飞机还没连接成功的时候,点击注册 然后连接,需要等待连接结果。 

    而不是在飞机连接好的情况下,监听它断开。

    0
    Comment actions Permalink
  • 大壮

    比如我在不连接遥控器和飞机的情况下,我打开APP,去点击注册,此时肯定是不会连接成功的。 我要知道sdk 直接告诉我连接失败。从而提醒用户,让用户无法进入具体的视屏页面。 经过实际测试,onProductDisconnect  是不会有回调的。

    0
    Comment actions Permalink
  • 大壮

    我在论坛上找到你们 V4版本的回复(https://sdk-forum.dji.net/hc/zh-cn/community/posts/16938966815001-DJI-GO-4%E5%92%8CSDK%E5%86%B2%E7%AA%81%E9%97%AE%E9%A2%98),说V4是没有连接失败回调的。 V5版本的SDK是已经修复这个bug了吗。 如果是V4不支持,V5支持回调。 我现在收不到回调,能否指导一下怎么使用。 我现在收不到失败的回调。  

     

    0
    Comment actions Permalink
  • DJI Developer Support
    比如我在不连接遥控器和飞机的情况下,我打开APP,去点击注册,此时肯定是不会连接成功的。 我要知道sdk 直接告诉我连接失败。从而提醒用户,让用户无法进入具体的视屏页面。 经过实际测试,onProductDisconnect 是不会有回调的。 -->MSKD只会告知连接成功,和断开连接,没有连接失败的状态。 不可以收到连接成功之后直接跳转到视屏页面吗?SDK一旦完成注册会不断尝试连接飞机,是没有连接失败的状态的。 如果你要判断这个时候有没有识别到飞机,之前给你发的文章里有提到,可以用FlightControllerKey的KeyConnection去监听连接状态。
    0
    Comment actions Permalink
  • 大壮

    但是我用以下方法继续监听,并没有收到任何回调。及时飞机已经连接成功了,能出图了。

    fun initMobileSDK(appContext: Context) {
    FlightControllerKey.KeyConnection.create().listen(appContext) { it ->
    LyLog.showLog("收到飞机连接结果的回调=$it")
    it?.let {
    isFlightConnected =it
    }
    }

     

    但是用以下代码获得的结果是 true 

    val result = KeyManager.getInstance()
    .getValue(KeyTools.createKey(FlightControllerKey.KeyConnection))

    请问是什么原因,是因为我监听的代码不对吗

     

    0
    Comment actions Permalink
  • 大壮

    难道是  FlightControllerKey.KeyConnection.create().listen(appContext) 这个回调只会在 飞机连上遥控器的一瞬间 才会调用一下? 

    0
    Comment actions Permalink
  • DJI Developer Support
    Key监听是建议放在注册成功之后的。我这样是可以拿到推送信息的 fun initMobileSDK(appContext: Context) { // Initialize and set the sdk callback, which is held internally by the sdk until destroy() is called SDKManager.getInstance().init(appContext, object : SDKManagerCallback { override fun onRegisterSuccess() { lvRegisterState.postValue(Pair(true, null)) FlightControllerKey.KeyConnection.create().listen(appContext) { it -> it?.let { Log.d("sss", "onRegisterSuccess: ${it.toString()}") } } }
    0
    Comment actions Permalink

Please sign in to leave a comment.