DJI 遥控器数据为空

DJI remote controller data is null

上下文

我正在尝试从遥控器获取以下数据:名称、两个天线之间的较低信号强度和 GPS 数据。

问题

所有这些数据都将变为空。唯一的例外是 Phantom 4 Pro V2,该名称是作为替换字符(黑色菱形和白色问号)出现的。

代码

@NonNull
public RemoteControllerInfo getRemoteControllerInfo() {
  final String name = (String) getValueFromDjiKey(
    RemoteControllerKey.create(RemoteControllerKey.NAME)
  );
  
  final LightbridgeAntennaRSSI antennas =
    (LightbridgeAntennaRSSI) getValueFromDjiKey(
      AirLinkKey.create(AirLinkKey.REMOTE_CONTROLLER_ANTENNA_RSSI)
    );
  final Integer signalStrengthInPercent = antennas == null
    ? null
    : Math.min(antennas.getAntenna1(), antennas.getAntenna2());
  
  final RemoteControllerGps remoteControllerGps;
  final GPSData gpsData = (GPSData) getValueFromDjiKey(
    RemoteControllerKey.create(RemoteControllerKey.GPS_DATA)
  );
  if (gpsData != null && gpsData.isValid()) {
    final GPSData.GPSLocation gpsLocation = gpsData.getLocation();
    final GPSData.Time gpsDateTime = gpsData.getTime();
    remoteControllerGps = RemoteControllerGps.builder()
      .latitude(gpsLocation.getLatitude())
      .longitude(gpsLocation.getLongitude())
      .year(gpsDateTime.getYear())
      .month((int) gpsDateTime.getMonth())
      .day((int) gpsDateTime.getDay())
      .hour((int) gpsDateTime.getHour())
      .minute((int) gpsDateTime.getMinute())
      .second((int) gpsDateTime.getSecond())
      .build();
  }
  
  return RemoteControllerInfo.builder()
    .name(name)
    .signalStrengthPercentage(signalStrengthInPercent)
    .remoteControllerGps(remoteControllerGps)
    .build();
}

@Nullable
private Object getValueFromDjiKey(@Nullable final DJIKey key) {
  final Object[] result = new Object[1];
  
  final CountDownLatch onFinishSignal = new CountDownLatch(1);
  KeyManager.getInstance().getValue(key, new GetCallback() {
    @Override
    public void onSuccess(@NonNull final Object o) {
      result[0] = o;
      
      onFinishSignal.countDown();
    }
    
    @Override
    public void onFailure(@NonNull final DJIError djiError) {
      onFinishSignal.countDown();
    }
  });
  synchronized (onFinishSignal) {
    try {
      onFinishSignal.await();
    } catch (final InterruptedException ignored) {
    }
  }
  
  return result[0];
}

环境:

如果我理解你的问题,你是调用SDK读取Phantom系列遥控器的GPS数据吗?

Phantom 飞行器的控制器没有内置 GPS,因此值为空。

如果我没记错的话,只有 Inspire 系列的控制器(可能还有其他更高端的飞行器控制器)包含 GPS。