正在上传图片(0/1)

请问Mobile SDK Android是否支持Dji Air 2 S?

 0
手机看帖 7 1780
连接Dji Air 2 S时,调用DJISDKManager.getInstance().getProduct(); 得到的值为'UNKNOWN',连接不成功,SDK里说是支持Mavic 2系列,难道最新的Dji Air 2 S不属于Mavic系列吗?
评论
上传
你需要登录之后才能回帖    登录 | 注册
sxx   2021-7-6 3#
可能是获取的时机不对?最新的4.15应该是支持的。我获取到model 返回的是 MAVIC_2_ENTERPRISE_ADVANCED
楼主   2021-7-6 4#
sxx7-6 16:13
可能是获取的时机不对?最新的4.15应该是支持的。我获取到model 返回的是 MAVIC_2_ENTERPRISE_ADVANCED
我用的是最新的4.15,连接Mavic 2 Pro正常,2S不行。我是在MainActivity::onCreate的时候去获取的。请问您是在哪个时机获取的?
楼主   2021-7-7 5#
sxx7-6 16:13
可能是获取的时机不对?最新的4.15应该是支持的。我获取到model 返回的是 MAVIC_2_ENTERPRISE_ADVANCED
我把获取时机改到了onProductConnect里了,获取到的也还是Unknown,然后DJISDKManager.getInstance().getProduct().isConnected()返回的是true,但是DJISDKManager.getInstance().getProduct().getFlightController()返回的是null。飞机的固件已经升级到最新,SDK用的4.15。
sxx   2021-7-8 6#
骆驼27-7 08:18
我把获取时机改到了onProductConnect里了,获取到的也还是Unknown,然后DJISDKManager.getInstance().getProduct().isConnected()返回的是true,但是DJISDKManager.getInstance().getProduct().getFlightController()返回的是null。飞机的固件已经升级到最新,SDK用的4.15。
至少要等到返回无人机才行。 这个也是MSDK比较坑逼的地方。你可以用KeyManager 监听  ProductKey.create(ProductKey.CONNECTION) 这个key。等到返回true再获取。一般都是先获取再添加监听
sxx   2021-7-8 7#
骆驼27-7 08:18
我把获取时机改到了onProductConnect里了,获取到的也还是Unknown,然后DJISDKManager.getInstance().getProduct().isConnected()返回的是true,但是DJISDKManager.getInstance().getProduct().getFlightController()返回的是null。飞机的固件已经升级到最新,SDK用的4.15。
KeyManager  一开始也是null。要判断,我在每一次通知产品连接的时候都会重置一遍监听设置。
楼主   2021-9-22 8#
sxx7-8 16:20
KeyManager  一开始也是null。要判断,我在每一次通知产品连接的时候都会重置一遍监听设置。
我现在在getFlightController()为null的时候,一直循环注册,调试也发现它一直在循环,但是返回永远都是null。SDK是4.15,飞机固件已经升级到最新。代码如下,请帮忙看看是否少了什么步骤,谢谢!
private void startSDKRegistration() {
        if (isRegistrationInProgress.compareAndSet(false, true)) {

        }
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                ToastUtils.setResultToToast("Registering, pls wait...");
                DJISDKManager.getInstance().registerApp(MainActivity.this.getApplicationContext(), new DJISDKManager.SDKManagerCallback() {
                    @Override
                    public void onRegister(DJIError djiError) {
                        if (djiError == DJISDKError.REGISTRATION_SUCCESS) {
                            DJILog.e("App registration", DJISDKError.REGISTRATION_SUCCESS.getDeion());
                            DJISDKManager.getInstance().startConnectionToProduct();
                            ToastUtils.setResultToToast("SDK Registered Successfully");
                            showDBVersion();
                            KeyManager.getInstance().addListener(ProductKey.create(ProductKey.CONNECTION), new KeyListener() {
                                @Override
                                public void onValueChange(@Nullable Object o, @Nullable Object o1) {
                                    Log.d(TAG, String.format("onProductConnect newProduct:%s", o1));
                                    if (DJISDKManager.getInstance().getProduct() != null && DJISDKManager.getInstance().getProduct() instanceof Aircraft && ((Aircraft)DJISDKManager.getInstance().getProduct()).getFlightController() != null) {
                                        fly.init();
                                    }else {
                                        startSDKRegistration();
                                    }
                                    notifyStatusChange();
                                }
                            });
                        } else {
                            ToastUtils.setResultToToast("SDK Registration Failed. Please check the bundle ID and your network\n" +
                                    "        connectivity"+ djiError.getDeion());
                        }
                        Log.v(TAG, djiError.getDeion());
                        hideProcess();
                    }
                    @Override
                    public void onProductDisconnect() {
                        Log.d(TAG, "onProductDisconnect");
                        notifyStatusChange();
                    }

                    @Override
                    public void onProductConnect(BaseProduct baseProduct) {
                        Log.d(TAG, String.format("onProductConnect newProduct:%s", baseProduct));
                        if (DJISDKManager.getInstance().getProduct() != null && DJISDKManager.getInstance().getProduct() instanceof Aircraft && ((Aircraft)DJISDKManager.getInstance().getProduct()).getFlightController() != null) {
                            fly.init();
                        }else {
                            startSDKRegistration();
                        }
                        notifyStatusChange();
                    }

                    @Override
                    public void onProductChanged(BaseProduct baseProduct) {
                        Log.d(TAG, String.format("onProductChanged newProduct:%s", baseProduct));
                        notifyStatusChange();
                    }

                    @Override
                    public void onComponentChange(BaseProduct.ComponentKey componentKey,
                                                  BaseComponent oldComponent,
                                                  BaseComponent newComponent) {
                        if (newComponent != null) {
                            newComponent.setComponentListener(mDJIComponentListener);
                        }
                        Log.d(TAG,
                                String.format("onComponentChange key:%s, oldComponent:%s, newComponent:%s",
                                        componentKey,
                                        oldComponent,
                                        newComponent));

                        notifyStatusChange();
                    }

                    @Override
                    public void onInitProcess(DJISDKInitEvent djisdkInitEvent, int i) {

                    }

                    @Override
                    public void onDatabaseDownloadProgress(long current, long total) {
                        int process = (int) (100 * current / total);
                        Log.d(TAG, "DB load process : " + process);
                        if (process == lastProcess) {
                            return;
                        }
                        lastProcess = process;
                        showProgress(process);
                        if (process % 25 == 0){
                            ToastUtils.setResultToToast("DB load process : " + process);
                        }else if (process == 0){
                            ToastUtils.setResultToToast("DB load begin");
                        }
                    }
                });
            }
        });
    }
楼主   2021-9-23 9#
收到官方的回复:
尊敬的开发者,
您好,感谢您联系DJI 大疆创新。

目前 MSDK 4.15.1还不支持 Air 2S,所以您无法使用 Air 2S 连接。我们计划在十二月底发布安卓版本的 MSDK 4.16,在这个版本中,将会支持 Air 2S、Mini 2以及 Mini SE。之后您将可以使用 MSDK 4.16来连接 Air 2S。
收藏 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表