基于MobileSDKV4版固件开发大疆无人机手机端遥控器(3) 您所在的位置:网站首页 大疆mini1遥控器 基于MobileSDKV4版固件开发大疆无人机手机端遥控器(3)

基于MobileSDKV4版固件开发大疆无人机手机端遥控器(3)

#基于MobileSDKV4版固件开发大疆无人机手机端遥控器(3)| 来源: 网络整理| 查看: 265

public class SettingRouteActivity extends BaseActivity implements AMap.OnMarkerClickListener, View.OnClickListener, AMap.OnMapClickListener, LocationSource, AMapLocationListener, AMap.InfoWindowAdapter {    @BindView(R.id.layout_route)        View mViewLayoutToolbar;        @BindView(R.id.ll_route)        LinearLayout mLinearLayout;        @BindView(R.id.tv_toolbar_title)        TextView mTextViewToolbarTitle;    //    @BindView(R.id.map)    //    MapView mMapView;

        @BindView(R.id.btn_delete)        Button mButtonDelete;        @BindView(R.id.btn_finish)        Button mButtonFinish;        @BindView(R.id.btn_setting)        Button mButtonSetting;        @BindView(R.id.btn_upload)        Button mButtonUpload;        @BindView(R.id.btn_start)        Button mButtonStart;        @BindView(R.id.btn_stop)        Button mButtonStop;

        @BindView(R.id.ll_information)        LinearLayout mLinearLayoutInformation;        @BindView(R.id.tv_height)        TextView mTextViewHeight;        @BindView(R.id.tv_speed)        TextView mTextViewSpeed;        @BindView(R.id.tv_count)        TextView mTextViewCount;        @BindView(R.id.tv_distance)        TextView mTextViewDistance;        @BindView(R.id.tv_time)        TextView mTextViewTime;

        private MapView mMapView;        private OnLocationChangedListener mListener;        private AMapLocationClient mlocationClient;        private AMapLocationClientOption mLocationOption;        private double D_latitude, D_longitude;        private UiSettings mUiSettings;        private AMap aMap;        private Marker droneMarker = null;

        private float altitude = 100.0f;        private float mSpeed = 10.0f;

        private boolean isAdd = false;

        private final Map mMarkers = new ConcurrentHashMap();        private Marker mClickMarker;        private List waypointList = new ArrayList();        private List mLatLng = new ArrayList();        private List mPointInfo = new ArrayList();

        public static WaypointMission.Builder waypointMissionBuilder;        private FlightController mFlightController;        private WaypointMissionOperator instance;        private WaypointMissionFinishedAction mFinishedAction = WaypointMissionFinishedAction.NO_ACTION;        private WaypointMissionHeadingMode mHeadingMode = WaypointMissionHeadingMode.AUTO;

        private SQLiteHelper mSQLiteHelper;        private String FinishedAction, HeadingMode;

        //自定义窗体        View infoWindow = null;

        int speed_RG_id = 0;        int actionAfterFinished_RG_id = 0;        int heading_RG_id = 0;

        //kim        static ReadKml readKml = new ReadKml();        private static List sampleList = readKml.getCoordinateList();

        @Override        public void initViews() {            mLinearLayout.setVisibility(View.VISIBLE);            mTextViewToolbarTitle.setText("航线规划");            IntentFilter filter = new IntentFilter();            filter.addAction(ReceiverApplication.FLAG_CONNECTION_CHANGE);            registerReceiver(mReceiver, filter);            mMapView = findViewById(R.id.map);            mMapView.onCreate(InstanceState);            initMapView();            addListener();            onProductConnectionChange();

        }

        @Override        protected void onResume() {            super.onResume();            initFlightController();            mMapView.onResume();        }

        /**         * 方法必须重写         */        @Override        protected void onSaveInstanceState(Bundle outState) {            super.onSaveInstanceState(outState);            mMapView.onSaveInstanceState(outState);        }

        @Override        protected void onPause() {            super.onPause();            mMapView.onPause();            deactivate();        }

        @Override        protected void onDestroy() {            super.onDestroy();            unregisterReceiver(mReceiver);            removeListener();            mMapView.onDestroy();            if (null != mlocationClient) {                mlocationClient.onDestroy();            }

        }

        @Override        public void initDatas() {

        }

        @Override        protected void requestData() {

        }

        private void initMapView() {            if (aMap == null) {                aMap = mMapView.getMap();                mUiSettings = aMap.getUiSettings();                mUiSettings.setMyLocationButtonEnabled(true);                mUiSettings.setScaleControlsEnabled(true);                aMap.setOnMapClickListener(this);// add the listener for click for amap object                aMap.setLocationSource(this);                aMap.setMyLocationEnabled(true);                aMap.setInfoWindowAdapter(this);                aMap.setOnMarkerClickListener(this);                setupLocationStyle();            }        }

        private void setupLocationStyle() {            // 自定义系统定位蓝点            MyLocationStyle myLocationStyle = new MyLocationStyle();            // 自定义定位蓝点图标            myLocationStyle.myLocationIcon(BitmapDescriptorFactory.                    fromResource(R.mipmap.icv_gps_point_36dp));            // 自定义精度范围的圆形边框颜色            myLocationStyle.strokeColor(Color.parseColor("#00000000"));            //自定义精度范围的圆形边框宽度            myLocationStyle.strokeWidth(5);            // 设置圆形的填充颜色            myLocationStyle.radiusFillColor(Color.parseColor("#00000000"));            // 将自定义的 myLocationStyle 对象添加到地图上            aMap.setMyLocationStyle(myLocationStyle);        }

        @OnClick({R.id.img_kml_input, R.id.img_setting_route, R.id.img_start_fly, R.id.btn_delete,                R.id.img_setting_clear, R.id.btn_finish, R.id.btn_setting, R.id.btn_upload,                R.id.btn_start, R.id.btn_stop, R.id.img_back})        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.img_back:                    SettingRouteActivity.this.finish();                    break;                case R.id.img_kml_input:                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);                    intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。                    intent.addCategory(Intent.CATEGORY_OPENABLE);                    startActivityForResult(intent, MyStatic.REQUEST_CODE_FILE);                    break;                case R.id.img_setting_route:                    enableDisableAdd();                    break;                case R.id.img_setting_clear:                    runOnUiThread(new Runnable() {                        @Override                        public void run() {                            aMap.clear();                            mMarkers.clear();                            mPointInfo.clear();                            mLinearLayoutInformation.setVisibility(View.GONE);                            mButtonFinish.setVisibility(View.GONE);                            mButtonSetting.setVisibility(View.GONE);                            mButtonUpload.setVisibility(View.GONE);                            mButtonStart.setVisibility(View.GONE);                            mButtonStop.setVisibility(View.GONE);                        }                    });                    waypointList.clear();                    waypointMissionBuilder.waypointList(waypointList);                    break;                case R.id.img_start_fly:                    atyAction(WaypointActivity.class, MyStatic.REQUEST_CODE_ID);                    break;                case R.id.btn_delete:                    runOnUiThread(new Runnable() {                        @Override                        public void run() {                            aMap.clear();                        }                    });                    for (int i = 0; i                         if (mMarkers.get(i).getTitle().equals(mClickMarker.getTitle())) {                            for (int j = i; j 1; j++) {                                mMarkers.put(j, mMarkers.get(j + 1));                            }                            mMarkers.remove(mMarkers.size() - 1);                        }                    }                    for (int i = 0; i                         mMarkers.get(i).setTitle("航点" + (i + 1));                    }                    updateMarkWaypoint();                    break;                case R.id.btn_finish:                    MyLog.d("航点数:" + waypointMissionBuilder.getWaypointCount());                    MyLog.d("总距离:" + waypointMissionBuilder.calculateTotalDistance());                    MyLog.d("总时间:" + waypointMissionBuilder.calculateTotalTime());                    isAdd = false;                    mButtonFinish.setVisibility(View.GONE);                    mButtonSetting.setVisibility(View.VISIBLE);                    mButtonUpload.setVisibility(View.VISIBLE);                    showSettingDialog();                    break;                case R.id.btn_setting:                    showSettingDialog();                    break;                case R.id.btn_upload:                    uploadWayPointMission();                    break;                case R.id.btn_start:                    startWaypointMission();                    break;                case R.id.btn_stop:                    stopWaypointMission();                    break;            }        }

        private void enableDisableAdd() {            if (isAdd == false) {                isAdd = true;                mButtonFinish.setVisibility(View.VISIBLE);            } else {                isAdd = false;            }        }

        private void initFlightController() {            BaseProduct product = ReceiverApplication.getProductInstance();            if (product != null && product.isConnected()) {                if (product instanceof Aircraft) {                    mFlightController = ((Aircraft) product).getFlightController();                }            }            if (mFlightController != null) {                mFlightController.setStateCallback(                        new FlightControllerState.Callback() {                            @Override                            public void onUpdate(FlightControllerState                                                         djiFlightControllerCurrentState) {                                if (djiFlightControllerCurrentState.getAircraftLocation().getLatitude() != 0.0 && djiFlightControllerCurrentState.getAircraftLocation().getLongitude() != 0.0) {                                    D_latitude = djiFlightControllerCurrentState.getAircraftLocation().getLatitude();                                    D_longitude = djiFlightControllerCurrentState.getAircraftLocation().getLongitude();                                }                                updateDroneLocation();                            }                        });            }        }

        private void updateDroneLocation() {            LatLng pos = new LatLng(D_latitude, D_longitude);            //Create MarkerOptions object            final MarkerOptions markerOptions = new MarkerOptions();            markerOptions.position(pos);            markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_aircraft_write_36dp));            runOnUiThread(new Runnable() {                @Override                public void run() {                    if (droneMarker != null) {                        droneMarker.remove();                    }

                    if (checkGpsCoordination(D_latitude, D_longitude)) {                        droneMarker = aMap.addMarker(markerOptions);                    }                }            });        }

        public static boolean checkGpsCoordination(double latitude, double longitude) {            return (latitude > -90 && latitude 90 && longitude > -180 && longitude 180) && (latitude != 0f && longitude != 0f);        }

        protected BroadcastReceiver mReceiver = new BroadcastReceiver() {

            @Override            public void onReceive(Context context, Intent intent) {                onProductConnectionChange();            }        };

        private void onProductConnectionChange() {            initFlightController();        }

        private void addListener() {            if (getWaypointMissionOperator() != null) {                getWaypointMissionOperator().addListener(eventNotificationListener);            }        }

        private void removeListener() {            if (getWaypointMissionOperator() != null) {                getWaypointMissionOperator().removeListener(eventNotificationListener);            }        }

        private WaypointMissionOperatorListener eventNotificationListener = new WaypointMissionOperatorListener() {            @Override            public void onDownloadUpdate(WaypointMissionDownloadEvent downloadEvent) {

            }

            @Override            public void onUploadUpdate(WaypointMissionUploadEvent uploadEvent) {

            }

            @Override            public void onExecutionUpdate(WaypointMissionExecutionEvent executionEvent) {

            }

            @Override            public void onExecutionStart() {

            }

            @Override            public void onExecutionFinish(@Nullable final DJIError error) {                showToasts("Execution finished: " + (error == null ? "Success!" : error.getDescription()));            }        };

        public WaypointMissionOperator getWaypointMissionOperator() {            if (instance == null) {                instance = DJISDKManager.getInstance().getMissionControl().getWaypointMissionOperator();            }            return instance;        }

        @Override        public void onMapClick(LatLng point) {            if (isAdd == true) {                markWaypoint(point);                Waypoint mWaypoint = new Waypoint(point.latitude, point.longitude, altitude);                //Add Waypoints to Waypoint arraylist;                if (waypointMissionBuilder != null) {                    waypointList.add(mWaypoint);                    waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                } else {                    waypointMissionBuilder = new WaypointMission.Builder();                    waypointList.add(mWaypoint);                    waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                }                mTextViewCount.setText("航点数:" + waypointMissionBuilder.getWaypointCount());                mTextViewDistance.setText("总距离:" + Math.round(waypointMissionBuilder.calculateTotalDistance()) + "m");                mTextViewTime.setText("总时间:" + Math.round(waypointMissionBuilder.calculateTotalTime()) + "min");            } else {                if (mClickMarker != null && mClickMarker.isInfoWindowShown()) {                    mClickMarker.hideInfoWindow();                    mButtonDelete.setVisibility(View.GONE);                }                //            showToasts("当前未开启增加点模式");            }

        }

        private void markWaypoint(LatLng point) {            MarkerOptions markerOptions = new MarkerOptions();            markerOptions.position(point);            mPointInfo.add(new PointInfo(point.latitude, point.longitude));            markerOptions.title("航点" + (mMarkers.size() + 1));            markerOptions.snippet("事件:");            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));            markerOptions.infoWindowEnable(true);            Marker marker = aMap.addMarker(markerOptions);            mMarkers.put(mMarkers.size(), marker);            marker.showInfoWindow();            if (mMarkers.size() > 0) {                mLatLng.clear();                PolylineOptions PolylineOptions = new PolylineOptions();                for (int i = 0; i                     mLatLng.add(mMarkers.get(i).getPosition());                }                PolylineOptions.addAll(mLatLng);                PolylineOptions.width(10);                PolylineOptions.color(Color.argb(255, 1, 1, 1));                aMap.addPolyline(PolylineOptions);            }        }

        private void updateMarkWaypoint() {            mLatLng.clear();            waypointList.clear();            mPointInfo.clear();            waypointMissionBuilder.waypointList(waypointList);            for (int i = 0; i                 mPointInfo.add(new PointInfo(mMarkers.get(i).getPosition().latitude, mMarkers.get(i).getPosition().longitude));                MarkerOptions markerOptions = new MarkerOptions();                Waypoint mWaypoint = new Waypoint(mMarkers.get(i).getPosition().latitude, mMarkers.get(i).getPosition().longitude, altitude);                waypointList.add(mWaypoint);                markerOptions.position(mMarkers.get(i).getPosition());                markerOptions.title(mMarkers.get(i).getTitle());                markerOptions.snippet(mMarkers.get(i).getSnippet());                markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));                aMap.addMarker(markerOptions);                mLatLng.add(mMarkers.get(i).getPosition());            }            if (mMarkers.size() > 0) {                PolylineOptions PolylineOptions = new PolylineOptions();                PolylineOptions.addAll(mLatLng);                PolylineOptions.width(10);                PolylineOptions.color(Color.argb(255, 1, 1, 1));                aMap.addPolyline(PolylineOptions);            }            waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());            mTextViewCount.setText("航点数:" + waypointMissionBuilder.getWaypointCount());            mTextViewDistance.setText("总距离:" + Math.round(waypointMissionBuilder.calculateTotalDistance()) + "m");            mTextViewTime.setText("总时间:" + Math.round(waypointMissionBuilder.calculateTotalTime()) + "min");            MyLog.d("航点数:" + waypointMissionBuilder.getWaypointCount());            MyLog.d("总距离:" + waypointMissionBuilder.calculateTotalDistance());            MyLog.d("总时间:" + waypointMissionBuilder.calculateTotalTime());            mButtonDelete.setVisibility(View.GONE);        }

        /**         * 定位成功后回调函数         */        @Override        public void onLocationChanged(AMapLocation amapLocation) {            if (mListener != null && amapLocation != null) {                if (amapLocation != null                        && amapLocation.getErrorCode() == 0) {                    D_latitude = amapLocation.getLatitude(); //获取纬度                    D_longitude = amapLocation.getLongitude(); //获取经度                    mListener.onLocationChanged(amapLocation);// 显示系统小蓝点                    aMap.moveCamera(CameraUpdateFactory.zoomTo(18));                } else {                    String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo();                    Log.e("AmapErr", errText);                }            }        }

        @Override        public void activate(OnLocationChangedListener listener) {            mListener = listener;            if (mlocationClient == null) {                try {                    mlocationClient = new AMapLocationClient(this);                } catch (Exception e) {                    e.printStackTrace();                }                mLocationOption = new AMapLocationClientOption();                //设置定位监听                mlocationClient.setLocationListener(this);                //设置为高精度定位模式                mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);                //设置定位参数                mLocationOption.setOnceLocation(true);                mlocationClient.setLocationOption(mLocationOption);                // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,                // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求                // 在定位结束后,在合适的生命周期调用onDestroy()方法                // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除                mlocationClient.startLocation();            }        }

        @Override        public void deactivate() {            mListener = null;            if (mlocationClient != null) {                mlocationClient.stopLocation();                mlocationClient.onDestroy();            }            mlocationClient = null;        }

        @Override        public View getInfoWindow(Marker marker) {            if (infoWindow == null) {                infoWindow = LayoutInflater.from(this).inflate(R.layout.amap_info_window, null);            }            render(marker, infoWindow);            return infoWindow;        }

        /**         * 自定义infoWindow窗口         */        private void render(Marker marker, View infoWindow) {            TextView title = infoWindow.findViewById(R.id.info_window_title);            TextView content = infoWindow.findViewById(R.id.info_window_content);            title.setText(marker.getTitle());            content.setText(marker.getSnippet());        }

        @Override        public View getInfoContents(Marker marker) {            return null;        }

        @Override        public boolean onMarkerClick(Marker marker) {            marker.showInfoWindow();            mClickMarker = marker;            mButtonDelete.setVisibility(View.VISIBLE);            //        aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(marker.getPosition(),18,0,0)));            return true;        }

        private void showSettingDialog() {            LinearLayout wayPointSettings = (LinearLayout) getLayoutInflater().inflate(R.layout.dialog_waypointsetting, null);

            final TextView wpAltitude_TV = (TextView) wayPointSettings.findViewById(R.id.altitude);            RadioGroup speed_RG = (RadioGroup) wayPointSettings.findViewById(R.id.speed);            RadioGroup actionAfterFinished_RG = (RadioGroup) wayPointSettings.findViewById(R.id.actionAfterFinished);            RadioGroup heading_RG = (RadioGroup) wayPointSettings.findViewById(R.id.heading);            wpAltitude_TV.setText(Math.round(altitude) + "");            if (speed_RG_id != 0) {                RadioButton radioButton = (RadioButton) speed_RG.findViewById(speed_RG_id);                radioButton.setChecked(true);            }            if (actionAfterFinished_RG_id != 0) {                RadioButton radioButton = (RadioButton) actionAfterFinished_RG.findViewById(actionAfterFinished_RG_id);                radioButton.setChecked(true);            }            if (heading_RG_id != 0) {                RadioButton radioButton = (RadioButton) heading_RG.findViewById(heading_RG_id);                radioButton.setChecked(true);            }            speed_RG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(RadioGroup group, int checkedId) {                    if (checkedId == R.id.lowSpeed) {                        mSpeed = 3.0f;                    } else if (checkedId == R.id.MidSpeed) {                        mSpeed = 5.0f;                    } else if (checkedId == R.id.HighSpeed) {                        mSpeed = 10.0f;                    }                    speed_RG_id = checkedId;                }

            });

            actionAfterFinished_RG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

                @Override                public void onCheckedChanged(RadioGroup group, int checkedId) {                    MyLog.d("选择动作完成");                    if (checkedId == R.id.finishNone) {                        mFinishedAction = WaypointMissionFinishedAction.NO_ACTION;                        FinishedAction = "0";                    } else if (checkedId == R.id.finishGoHome) {                        mFinishedAction = WaypointMissionFinishedAction.GO_HOME;                        FinishedAction = "1";                    } else if (checkedId == R.id.finishAutoLanding) {                        mFinishedAction = WaypointMissionFinishedAction.AUTO_LAND;                        FinishedAction = "2";                    } else if (checkedId == R.id.finishToFirst) {                        mFinishedAction = WaypointMissionFinishedAction.GO_FIRST_WAYPOINT;                        FinishedAction = "3";                    }                    actionAfterFinished_RG_id = checkedId;                }            });

            heading_RG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {                @Override                public void onCheckedChanged(RadioGroup group, int checkedId) {                    MyLog.d("选择标题");                    if (checkedId == R.id.headingNext) {                        mHeadingMode = WaypointMissionHeadingMode.AUTO;                        HeadingMode = "0";                    } else if (checkedId == R.id.headingInitDirec) {                        mHeadingMode = WaypointMissionHeadingMode.USING_INITIAL_DIRECTION;                        HeadingMode = "1";                    } else if (checkedId == R.id.headingRC) {                        mHeadingMode = WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER;                        HeadingMode = "2";                    } else if (checkedId == R.id.headingWP) {                        mHeadingMode = WaypointMissionHeadingMode.USING_WAYPOINT_HEADING;                        HeadingMode = "3";                    }                    heading_RG_id = checkedId;                }            });

            new AlertDialog.Builder(this)                    .setTitle("航点设置")                    .setView(wayPointSettings)                    .setNeutralButton("设置", new DialogInterface.OnClickListener() {                        public void onClick(DialogInterface dialog, int id) {                            String altitudeString = wpAltitude_TV.getText().toString();                            altitude = Integer.parseInt(nulltoIntegerDefalt(altitudeString));                            MyLog.e("altitude " + altitude);                            MyLog.e("speed " + mSpeed);                            MyLog.e("mFinishedAction " + mFinishedAction);                            MyLog.e("mHeadingMode " + mHeadingMode);                            configWayPointMission();                        }                    })                    .setCancelable(false)                    .create()                    .show();        }

        String nulltoIntegerDefalt(String value) {            if (!isIntValue(value))                value = "0";            return value;        }

        boolean isIntValue(String val) {            try {                val = val.replace(" ", "");                Integer.parseInt(val);            } catch (Exception e) {                return false;            }            return true;        }

        private void configWayPointMission() {

            if (waypointMissionBuilder == null) {

                waypointMissionBuilder = new WaypointMission.Builder().finishedAction(mFinishedAction)                        .headingMode(mHeadingMode)                        .autoFlightSpeed(mSpeed)                        .maxFlightSpeed(mSpeed)                        .flightPathMode(WaypointMissionFlightPathMode.NORMAL);

            } else {                waypointMissionBuilder.finishedAction(mFinishedAction)                        .headingMode(mHeadingMode)                        .autoFlightSpeed(mSpeed)                        .maxFlightSpeed(mSpeed)                        .flightPathMode(WaypointMissionFlightPathMode.NORMAL);

            }

            if (waypointMissionBuilder.getWaypointList().size() > 0) {                for (int i = 0; i                     waypointMissionBuilder.getWaypointList().get(i).altitude = altitude;                }            }

            DJIError error = getWaypointMissionOperator().loadMission(waypointMissionBuilder.build());            if (error == null) {                if (mLinearLayoutInformation.getVisibility() == View.GONE) {                    mLinearLayoutInformation.setVisibility(View.VISIBLE);                }                mTextViewHeight.setText("高度:" + altitude + "m");                mTextViewSpeed.setText("速度:" + mSpeed + "m/s");                mTextViewCount.setText("航点数:" + waypointMissionBuilder.getWaypointCount());                mTextViewDistance.setText("总距离:" + Math.round(waypointMissionBuilder.calculateTotalDistance()) + "m");                mTextViewTime.setText("总时间:" + Math.round(waypointMissionBuilder.calculateTotalTime()) + "min");                MyLog.d("航点数:" + waypointMissionBuilder.getWaypointCount());                MyLog.d("总距离:" + waypointMissionBuilder.calculateTotalDistance());                MyLog.d("总时间:" + waypointMissionBuilder.calculateTotalTime());                showToasts("航路点配置成功");            } else {                showToasts("航路点配置失败 " + error.getDescription());            }

        }

        private void uploadWayPointMission() {            getWaypointMissionOperator().uploadMission(new CommonCallbacks.CompletionCallback() {                @Override                public void onResult(DJIError error) {                    if (error == null) {                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                mButtonSetting.setVisibility(View.GONE);                                mButtonUpload.setVisibility(View.GONE);                                mButtonStart.setVisibility(View.VISIBLE);                                mButtonStop.setVisibility(View.VISIBLE);                            }                        });                        showToasts("任务上传成功!");                        mSQLiteHelper = new SQLiteHelper(SettingRouteActivity.this);                        MyLog.d("航点值:" + GsonUtil.GsonString(mPointInfo));                        mSQLiteHelper.doInsert(GsonUtil.GsonString(mPointInfo), altitude, mSpeed, HeadingMode, FinishedAction,                                waypointMissionBuilder.getWaypointCount(), Math.round(waypointMissionBuilder.calculateTotalDistance()),                                Math.round(waypointMissionBuilder.calculateTotalTime()), DateUtils.getCurrentDate());                        mSQLiteHelper.close();                    } else {                        showToasts("任务上传失败, error: " + error.getDescription() + " retrying...");                        getWaypointMissionOperator().retryUploadMission(null);                    }                }            });

        }

        private void startWaypointMission() {

            getWaypointMissionOperator().startMission(new CommonCallbacks.CompletionCallback() {                @Override                public void onResult(DJIError error) {                    showToasts("任务开始: " + (error == null ? "成功" : "失败:" + error.getDescription()));                }            });

        }

        private void stopWaypointMission() {

            getWaypointMissionOperator().stopMission(new CommonCallbacks.CompletionCallback() {                @Override                public void onResult(DJIError error) {                    showToasts("任务暂停: " + (error == null ? "成功" : "失败" + error.getDescription()));                }            });        }

        @Override        protected void onActivityResult(int requestCode, int resultCode, Intent data) {            switch (requestCode) {                case 101:                    int Id = data.getExtras().getInt("id");                    MyLog.d("返回的ID:" + Id);                    if (Id > -1) {                        refreshMapPoint(Id);                    }                    break;                case 102:                    if (data.getData() != null) {                        Uri uri = data.getData();//得到uri,后面就是将uri转化成file的过程。                        String img_path = uri.getPath();                        try {                            if (!TextUtils.isEmpty(img_path)) {                                readKml.parseKml(img_path);                                addSampleMarker();                            }                        } catch (Exception e) {                            e.printStackTrace();                        }                    }                    break;                default:                    break;            }

        }

        private void refreshMapPoint(int id) {            aMap.clear();            mMarkers.clear();            mPointInfo.clear();            mLinearLayoutInformation.setVisibility(View.GONE);            mButtonFinish.setVisibility(View.GONE);            mButtonSetting.setVisibility(View.GONE);            mButtonUpload.setVisibility(View.GONE);            mButtonStart.setVisibility(View.GONE);            mButtonStop.setVisibility(View.GONE);            waypointList.clear();            mSQLiteHelper = new SQLiteHelper(SettingRouteActivity.this);            Cursor c = mSQLiteHelper.doSelectWaypoint(id);            if (c != null) {                if (c.moveToNext()) {                    MyLog.d("航点:" + "{'pointInfo':" + c.getString(1) + "}");                    mPointInfo.addAll(GsonUtil.GsonToBean("{'pointInfo':" + c.getString(1) + "}", Root.class).getPointInfo());                    altitude = c.getFloat(2);                    mSpeed = c.getFloat(3);                    switch (c.getString(4)) {                        case "0":                            mHeadingMode = WaypointMissionHeadingMode.AUTO;                            break;                        case "1":                            mHeadingMode = WaypointMissionHeadingMode.USING_INITIAL_DIRECTION;                            break;                        case "2":                            mHeadingMode = WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER;                            break;                        case "3":                            mHeadingMode = WaypointMissionHeadingMode.USING_WAYPOINT_HEADING;                            break;                        case "4":                            mHeadingMode = WaypointMissionHeadingMode.TOWARD_POINT_OF_INTEREST;                            break;                    }                    switch (c.getString(5)) {                        case "0":                            mFinishedAction = WaypointMissionFinishedAction.NO_ACTION;                            break;                        case "1":                            mFinishedAction = WaypointMissionFinishedAction.GO_HOME;                            break;                        case "2":                            mFinishedAction = WaypointMissionFinishedAction.AUTO_LAND;                            break;                        case "3":                            mFinishedAction = WaypointMissionFinishedAction.GO_FIRST_WAYPOINT;                            break;                        case "4":                            mFinishedAction = WaypointMissionFinishedAction.CONTINUE_UNTIL_END;                            break;                    }                }            }            for (int i = 0; i                 showWaypoint(new LatLng(mPointInfo.get(i).getLatitude(), mPointInfo.get(i).getLongitude()));                Waypoint mWaypoint = new Waypoint(mPointInfo.get(i).getLatitude(), mPointInfo.get(i).getLongitude(), altitude);                if (waypointMissionBuilder != null) {                    waypointList.add(mWaypoint);                    waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                } else {                    waypointMissionBuilder = new WaypointMission.Builder();                    waypointList.add(mWaypoint);                    waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                }            }            aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(mPointInfo.get(0).getLatitude(), mPointInfo.get(0).getLongitude()), 18, 0, 0)));            ResultconfigWayPointMission();            getWaypointMissionOperator().uploadMission(new CommonCallbacks.CompletionCallback() {                @Override                public void onResult(DJIError djiError) {                    if (djiError == null) {                        showToasts("获取任务成功!");                    }                }            });        }

        private void showWaypoint(LatLng point) {            MarkerOptions markerOptions = new MarkerOptions();            markerOptions.position(point);            markerOptions.title("航点" + (mMarkers.size() + 1));            markerOptions.snippet("事件:");            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));            markerOptions.infoWindowEnable(true);            Marker marker = aMap.addMarker(markerOptions);            mMarkers.put(mMarkers.size(), marker);            marker.showInfoWindow();            if (mMarkers.size() > 0) {                mLatLng.clear();                PolylineOptions PolylineOptions = new PolylineOptions();                for (int i = 0; i                     mLatLng.add(mMarkers.get(i).getPosition());                }                PolylineOptions.addAll(mLatLng);                PolylineOptions.width(10);                PolylineOptions.color(Color.argb(255, 1, 1, 1));                aMap.addPolyline(PolylineOptions);            }        }

        private void ResultconfigWayPointMission() {

            if (waypointMissionBuilder == null) {

                waypointMissionBuilder = new WaypointMission.Builder().finishedAction(mFinishedAction)                        .headingMode(mHeadingMode)                        .autoFlightSpeed(mSpeed)                        .maxFlightSpeed(mSpeed)                        .flightPathMode(WaypointMissionFlightPathMode.NORMAL);

            } else {                waypointMissionBuilder.finishedAction(mFinishedAction)                        .headingMode(mHeadingMode)                        .autoFlightSpeed(mSpeed)                        .maxFlightSpeed(mSpeed)                        .flightPathMode(WaypointMissionFlightPathMode.NORMAL);

            }

            if (waypointMissionBuilder.getWaypointList().size() > 0) {                for (int i = 0; i                     waypointMissionBuilder.getWaypointList().get(i).altitude = altitude;                }            }

            DJIError error = getWaypointMissionOperator().loadMission(waypointMissionBuilder.build());            if (error == null) {                if (mLinearLayoutInformation.getVisibility() == View.GONE) {                    mLinearLayoutInformation.setVisibility(View.VISIBLE);                }                mButtonStart.setVisibility(View.VISIBLE);                mButtonStop.setVisibility(View.VISIBLE);                mTextViewHeight.setText("高度:" + altitude + "m");                mTextViewSpeed.setText("速度:" + mSpeed + "m/s");                mTextViewCount.setText("航点数:" + waypointMissionBuilder.getWaypointCount());                mTextViewDistance.setText("总距离:" + Math.round(waypointMissionBuilder.calculateTotalDistance()) + "m");                mTextViewTime.setText("总时间:" + Math.round(waypointMissionBuilder.calculateTotalTime()) + "min");            }        }

        private void addSampleMarker() {            if (ReadKml.addSampleSuccess) {                aMap.clear();                mMarkers.clear();                mPointInfo.clear();                waypointList.clear();                if (mLinearLayoutInformation.getVisibility() == View.VISIBLE) {                    mLinearLayoutInformation.setVisibility(View.GONE);                }                mButtonFinish.setVisibility(View.GONE);                mButtonSetting.setVisibility(View.GONE);                mButtonUpload.setVisibility(View.GONE);                mButtonStart.setVisibility(View.GONE);                mButtonStop.setVisibility(View.GONE);                for (int i = 0; i                     showWaypoint(new LatLng(sampleList.get(i).getX(), sampleList.get(i).getY()));                    Waypoint mWaypoint = new Waypoint(sampleList.get(i).getX(), sampleList.get(i).getY(), altitude);                    //Add Waypoints to Waypoint arraylist;                    if (waypointMissionBuilder != null) {                        waypointList.add(mWaypoint);                        waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                    } else {                        waypointMissionBuilder = new WaypointMission.Builder();                        waypointList.add(mWaypoint);                        waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());                    }                }                aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(sampleList.get(0).getX(), sampleList.get(0).getY()), 18, 0, 0)));                showSettingDialog();                mButtonSetting.setVisibility(View.VISIBLE);                mButtonUpload.setVisibility(View.VISIBLE);            } else {                Log.d("MainActivity", "addSampleSuccess is false or aMap is null");            }        }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有