#android #dji-sdk
#Android #dji-sdk
Вопрос:
Контекст
Я пытаюсь получить следующие данные с пульта дистанционного управления: имя, более низкий уровень сигнала между двумя антеннами и данными 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 amp;amp; 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];
}
Окружающая среда:
- Phantom 4 Pro / Pro V2 / Расширенный / Стандартный
- Android 9
- MSDK v4.13.1
Ответ №1:
Если я понимаю вашу проблему, вы вызываете SDK для считывания данных GPS с пульта дистанционного управления для контроллера серии Phantom?
Контроллер для самолетов Phantom не имеет встроенного GPS, поэтому значения будут равны нулю.
Если я правильно помню, только контроллеры серии Inspire (и, возможно, другие контроллеры самолетов более высокого класса) включают GPS.
Комментарии:
1. Это объясняет часть GPS, но есть ли у вас какие-либо подсказки о том, почему имя и антенны также обнуляются?
2. Необходимо просмотреть документацию, но я не верю, что P4 является Airlink, поэтому он будет нулевым.