【问题标题】:Set Home Location - DJI Android Mobile SDK设置首页位置 - DJI Android Mobile SDK
【发布时间】:2018-11-05 14:26:05
【问题描述】:

我已成功使用公共 void onMapClick(LatLng point) 在 Google 地图上添加标记。

我将 "point" 的值存储到 private LatLng mLatLngHOME = point; (将用于 initFlightController() 方法设置 Home 位置)。

private void initFlightController() {

    if (isFlightControllerSupported()) {
        mFlightController = ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController();
        mFlightController.setStateCallback(new FlightControllerState.Callback() {
            @Override
            public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {

                    djiFlightControllerCurrentState.setHomeLocation(new LocationCoordinate2D(mLatLngHOME.latitude, mLatLngHOME.longitude));
            }
        });
    }
}

private boolean isFlightControllerSupported() {
    return DJISDKManager.getInstance().getProduct() != null &&
            DJISDKManager.getInstance().getProduct() instanceof Aircraft &&
            ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController() != null;
}

使用 DJI 演示应用程序 (DJIDemoApplication.java & MApplication.java),我在 MainActivity 中创建了一个广播接收器 .java.

在广播中,我调用了一个方法 updateFlightController() 来显示一些 Toast 消息:

private void updateFlightController() {

    if (isFlightControllerSupported()) {
        mFlightController = ((Aircraft) DJISDKManager.getInstance().getProduct()).getFlightController();
        mFlightController.setStateCallback(new FlightControllerState.Callback() {
            @Override
            public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {

                    // TEST
                    showToast("mLatLngHOME = " + mLatLngHOME);
                    showToast("Latitude / Longitude = " + mLatLngHOME.latitude + " / " + mLatLngHOME.longitude);
            }
        });
    }
}

问题是,它们显示 mLatLngHOME = nullLatitude / Longitude = NaN / NaN

好像在 updateFlightController() 方法中,它停留在一个循环中 并保留一些旧值。

我错过了什么吗?

【问题讨论】:

    标签: java android location dji-sdk


    【解决方案1】:

    这似乎不是 DJI 的 SDK 的问题,因为您使用的类和积分并非源自 DJI 的产品。

    【讨论】:

      【解决方案2】:

      mLatLngHOME 变量永远不会在 FlightController 的 setStateCallbackonUpdate() 方法中更新,因此它肯定会保留旧值。请查看以下代码以供参考:

       if (mFlightController != null) {
              mFlightController.setStateCallback(new FlightControllerState.Callback() {
                  @Override
                  public void onUpdate(FlightControllerState djiFlightControllerCurrentState) {
                      droneLocationLat = djiFlightControllerCurrentState.getAircraftLocation().getLatitude();
                      droneLocationLng = djiFlightControllerCurrentState.getAircraftLocation().getLongitude();
                      updateDroneLocation();
                  }
              });
          }
      

      更多DJIFlightController使用详情,可以查看本教程:https://developer.dji.com/mobile-sdk/documentation/android-tutorials/GSDemo-Google-Map.html#locating-aircraft-on-google-map

      【讨论】:

        猜你喜欢
        • 2019-05-02
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多