下午好,
成功建立与无人机的连接(在 MainActivity.java 中)(获取其型号名称并启用“打开”按钮)后,我打开一个新的活动( LocationActivity.java) ),我必须在Toast消息中显示飞机的位置(型号:M210 )。
消息内容:Lat / Lng = NaN / NaN
private FlightController mFlightController;
private double mDroneLocationLat;
private double mDroneLocationLng;
在 onCreate()方法中,我创建了一个广播接收器:
IntentFilter filter = new IntentFilter();
filter.addAction(FPVDemoApplication.FLAG_CONNECTION_CHANGE);
registerReceiver(mReceiver, filter);
FPVDemoApplication 是一个Java文件,DJI构造函数已在其中编写了一些代码+创建了一个广播发件人。您可以在Github上找到它。
然后:
protected BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onProductConnectionChange();
}
};
private void onProductConnectionChange()
{
initFlightController();
}
在 initFlightController()方法中,我使用以下代码获取飞机位置: getFlightController()和 getAircraftLocation() >。
BaseProduct product = FPVDemoApplication.getProductInstance();
if (product != null && product.isConnected()) {
if (product instanceof Aircraft) {
mFlightController = ((Aircraft) product).getFlightController();
}
}
// Getting Aircraft
// ================
if (mFlightController != null) {
mFlightController.setStateCallback(
new FlightControllerState.Callback() {
@Override
public void onUpdate(FlightControllerState
djiFlightControllerCurrentState) {
mDroneLocationLat = djiFlightControllerCurrentState.getAircraftLocation().getLatitude();
mDroneLocationLng = djiFlightControllerCurrentState.getAircraftLocation().getLongitude();
}
}
);
}
-
问题是:
我需要哪些权限才能访问 Manifest.xml 或其他Java文件中有关飞机位置的信息?
由于我的飞机在办公室,我是否必须走到外面以获得位置(根据this thread的说法)?
这是结构树:
答案 0 :(得分:1)
我找到了解决方案:这非常愚蠢>。<!我忘了将GPS天线安装在无人机上,而走到外面以获得更好的信号水平。 getAircraftLocation()是正确的,但是如果您使用此方法 LEVEL_0 ( djiFlightControllerCurrentState.getGPSSignalLevel()),则不会获得无人机位置