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];
}
环境:
- 精灵4Pro/ProV2/Advanced/Standard
- Android 9
- MSDK v4.13.1
如果我理解你的问题,你是调用SDK读取Phantom系列遥控器的GPS数据吗?
Phantom 飞行器的控制器没有内置 GPS,因此值为空。
如果我没记错的话,只有 Inspire 系列的控制器(可能还有其他更高端的飞行器控制器)包含 GPS。
上下文
我正在尝试从遥控器获取以下数据:名称、两个天线之间的较低信号强度和 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];
}
环境:
- 精灵4Pro/ProV2/Advanced/Standard
- Android 9
- MSDK v4.13.1
如果我理解你的问题,你是调用SDK读取Phantom系列遥控器的GPS数据吗?
Phantom 飞行器的控制器没有内置 GPS,因此值为空。
如果我没记错的话,只有 Inspire 系列的控制器(可能还有其他更高端的飞行器控制器)包含 GPS。