feat: 单个数据增加路径规划功能

This commit is contained in:
2022-11-03 10:37:10 +08:00
parent 3da460c914
commit c6a1737d63
14 changed files with 561 additions and 82 deletions
@@ -0,0 +1,46 @@
package com.navinfo.outdoor.activity;
import androidx.lifecycle.LifecycleObserver;
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
import com.navinfo.outdoor.base.NaviLifeCycle;
import com.navinfo.outdoor.util.NaviUtils;
import com.tencent.map.navi.TencentNaviManager;
import com.tencent.map.navi.car.CarNaviView;
import com.tencent.map.navi.data.NaviPoi;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class NaviCarActivity extends BaseActivity {
private CarNaviView carNaviView;
private LifecycleObserver lifecycleObserver;
@Override
protected int getLayout() {
return R.layout.activity_navi_car;
}
@Override
protected void initView() {
super.initView();
carNaviView = findViewById(R.id.carnaviview);
lifecycleObserver = new NaviLifeCycle(carNaviView);
getLifecycle().addObserver(lifecycleObserver);
TencentNaviManager naviManager = NaviUtils.getInstance().obitainnaviManager(this, Constant.currentNaviType, carNaviView);
// 获取起终点
LatLng startLatlng = (LatLng) getIntent().getExtras().get("start");
LatLng endLatlng = (LatLng) getIntent().getExtras().get("end");
try {
NaviUtils.getInstance().searchRoute(Constant.currentNaviType, naviManager, new NaviPoi(startLatlng.latitude, startLatlng.longitude), new NaviPoi(endLatlng.latitude, endLatlng.longitude));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
getLifecycle().removeObserver(lifecycleObserver);
// 如果当前正在导航,自动停止
NaviUtils.getInstance().stopNavi();
}
}
@@ -0,0 +1,48 @@
package com.navinfo.outdoor.activity;
import androidx.lifecycle.LifecycleObserver;
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
import com.navinfo.outdoor.base.NaviLifeCycle;
import com.navinfo.outdoor.util.NaviUtils;
import com.tencent.map.navi.TencentNaviManager;
import com.tencent.map.navi.car.CarNaviView;
import com.tencent.map.navi.data.NaviPoi;
import com.tencent.map.navi.ride.RideNaviView;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class NaviRideActivity extends BaseActivity {
private RideNaviView rideNaviView;
private LifecycleObserver lifecycleObserver;
@Override
protected int getLayout() {
return R.layout.activity_navi_car;
}
@Override
protected void initView() {
super.initView();
rideNaviView = findViewById(R.id.ridenaviview);
lifecycleObserver = new NaviLifeCycle(rideNaviView);
getLifecycle().addObserver(lifecycleObserver);
TencentNaviManager naviManager = NaviUtils.getInstance().obitainnaviManager(this, Constant.currentNaviType, rideNaviView);
// 获取起终点
LatLng startLatlng = (LatLng) getIntent().getSerializableExtra("start");
LatLng endLatlng = (LatLng) getIntent().getSerializableExtra("end");
try {
NaviUtils.getInstance().searchRoute(Constant.currentNaviType, naviManager, new NaviPoi(startLatlng.latitude, startLatlng.longitude), new NaviPoi(endLatlng.latitude, endLatlng.longitude));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
getLifecycle().removeObserver(lifecycleObserver);
// 如果当前正在导航,自动停止
NaviUtils.getInstance().stopNavi();
}
}
@@ -0,0 +1,48 @@
package com.navinfo.outdoor.activity;
import androidx.lifecycle.LifecycleObserver;
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseActivity;
import com.navinfo.outdoor.base.NaviLifeCycle;
import com.navinfo.outdoor.util.NaviUtils;
import com.tencent.map.navi.TencentNaviManager;
import com.tencent.map.navi.data.NaviPoi;
import com.tencent.map.navi.ride.RideNaviView;
import com.tencent.map.navi.walk.WalkNaviView;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class NaviWalkActivity extends BaseActivity {
private WalkNaviView walkNaviView;
private LifecycleObserver lifecycleObserver;
@Override
protected int getLayout() {
return R.layout.activity_navi_car;
}
@Override
protected void initView() {
super.initView();
walkNaviView = findViewById(R.id.walknaviview);
lifecycleObserver = new NaviLifeCycle(walkNaviView);
getLifecycle().addObserver(lifecycleObserver);
TencentNaviManager naviManager = NaviUtils.getInstance().obitainnaviManager(this, Constant.currentNaviType, walkNaviView);
// 获取起终点
LatLng startLatlng = (LatLng) getIntent().getSerializableExtra("start");
LatLng endLatlng = (LatLng) getIntent().getSerializableExtra("end");
try {
NaviUtils.getInstance().searchRoute(Constant.currentNaviType, naviManager, new NaviPoi(startLatlng.latitude, startLatlng.longitude), new NaviPoi(endLatlng.latitude, endLatlng.longitude));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
getLifecycle().removeObserver(lifecycleObserver);
// 如果当前正在导航,自动停止
NaviUtils.getInstance().stopNavi();
}
}
@@ -0,0 +1,46 @@
package com.navinfo.outdoor.base;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import com.tencent.map.navi.car.CarNaviView;
import com.tencent.map.ui.c;
public class NaviLifeCycle implements DefaultLifecycleObserver {
private com.tencent.map.ui.c naviView;
public NaviLifeCycle(c naviView) {
this.naviView = naviView;
}
@Override
public void onStart(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onStart(owner);
naviView.onStart();
}
@Override
public void onResume(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onResume(owner);
naviView.onResume();
}
@Override
public void onPause(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onPause(owner);
naviView.onPause();
}
@Override
public void onStop(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onStop(owner);
naviView.onStop();
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onDestroy(owner);
naviView.onDestroy();
}
}
@@ -2,6 +2,7 @@ package com.navinfo.outdoor.fragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Message;
@@ -21,6 +22,9 @@ import com.kongzue.dialog.util.DialogSettings;
import com.kongzue.dialog.v3.MessageDialog;
import com.lzy.okgo.model.HttpParams;
import com.navinfo.outdoor.R;
import com.navinfo.outdoor.activity.NaviCarActivity;
import com.navinfo.outdoor.activity.NaviRideActivity;
import com.navinfo.outdoor.activity.NaviWalkActivity;
import com.navinfo.outdoor.api.Constant;
import com.navinfo.outdoor.base.BaseFragment;
import com.navinfo.outdoor.bean.PolygonTaskBean;
@@ -224,14 +228,20 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe
ToastUtils.Message(getActivity(), "无法获取当前数据的位置,请重新打开此数据尝试!");
return;
}
// 使用当前数据起点作为导航的终点,规划路径
NaviPoi startPoi = new NaviPoi(Constant.currentLocation.getLatitude(), Constant.currentLocation.getLongitude());
NaviPoi endPoi = new NaviPoi(Double.parseDouble(poiEntity.getY()), Double.parseDouble(poiEntity.getX()));
try {
NaviUtils.getInstance().searchRoute(Constant.currentNaviType, NaviUtils.getInstance().obitainnaviManager(getActivity(), Constant.currentNaviType), startPoi, endPoi);
} catch (Exception e) {
e.printStackTrace();
// 跳转到指定的Activity
Class toClass = null;
if (Constant.currentNaviType == Constant.NAV_TYPE.CAR) {
toClass = NaviCarActivity.class;
} else if (Constant.currentNaviType == Constant.NAV_TYPE.RIDE) {
toClass = NaviRideActivity.class;
} else {
toClass = NaviWalkActivity.class;
}
Intent naviIntent = new Intent(getActivity(), toClass);
// 使用当前数据起点作为导航的终点,规划路径
naviIntent.putExtra("start", new LatLng(Constant.currentLocation.getLatitude(), Constant.currentLocation.getLongitude()));
naviIntent.putExtra("end", new LatLng(Double.parseDouble(poiEntity.getY()), Double.parseDouble(poiEntity.getX())));
getActivity().startActivity(naviIntent);
}
/**
@@ -283,8 +283,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen
initUM();
//检查是否有没有填完的页面
initSharePre();
// 初始化导航工具类
NaviUtils.getInstance().init(getActivity(), tencentMap, findViewById(R.id.fram_navi_view));
}
@Override
@@ -1152,8 +1150,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen
}
removableScreenMarker.clear();
}
// 如果当前正在导航,自动停止
NaviUtils.getInstance().stopNavi();
}
@Override
@@ -3,8 +3,8 @@ package com.navinfo.outdoor.http;
public class HttpInterface {
// public static final String IP = "http://172.23.138.133:9999/m4";//测试接口-IP
public static final String IPm = "http://dtxbmaps.navinfo.com/dtxb/dev/m4";//开发接口-外网
public static final String IP1 = "http://dtxbmaps.navinfo.com/dtxb/test/m4";//测试接口-外网
public static final String IP = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口
public static final String IP = "http://dtxbmaps.navinfo.com/dtxb/test/m4";//测试接口-外网
public static final String IP1 = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口
public static final String USER_PATH = "/user/";//我的
public static final String MSG_LIST_PATH = "/msgList/";//发现
public static final String USER_LOGIN_PATH = "/userlogin/";//登录
@@ -1,5 +1,6 @@
package com.navinfo.outdoor.util;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
@@ -15,13 +16,20 @@ import com.navinfo.outdoor.R;
import com.navinfo.outdoor.api.Constant;
import com.tencent.map.navi.CalcRouteCallback;
import com.tencent.map.navi.INaviView;
import com.tencent.map.navi.TencentNaviCallback;
import com.tencent.map.navi.TencentNaviManager;
import com.tencent.map.navi.TencentRideNaviListener;
import com.tencent.map.navi.TencentRouteSearchCallback;
import com.tencent.map.navi.TencentWalkNaviListener;
import com.tencent.map.navi.car.CarNaviView;
import com.tencent.map.navi.car.CarRouteSearchOptions;
import com.tencent.map.navi.car.TencentCarNaviManager;
import com.tencent.map.navi.data.AttachedLocation;
import com.tencent.map.navi.data.CalcRouteResult;
import com.tencent.map.navi.data.NaviPoi;
import com.tencent.map.navi.data.NaviTts;
import com.tencent.map.navi.data.NavigationData;
import com.tencent.map.navi.data.ParallelRoadStatus;
import com.tencent.map.navi.data.RouteColors;
import com.tencent.map.navi.data.RouteData;
import com.tencent.map.navi.data.TrafficItem;
@@ -47,10 +55,6 @@ public class NaviUtils {
private static NaviUtils instance;
private Context mContext;
private TencentMap tencentMap;
private View framNaviView; // 各类型导航界面的父界面,可以通过该view获取驾车导航、骑行导航和步行导航的view
private CarNaviView carNaviView; // 驾车导航界面
private RideNaviView rideNaviView; // 骑行导航界面
private WalkNaviView walkNaviView; // 步行导航界面
private TencentNaviManager naviManager = null;
public static NaviUtils getInstance() {
if (instance == null) {
@@ -59,16 +63,6 @@ public class NaviUtils {
return instance;
}
// 在调用路径规划和导航前必须提前调用该方法,后续流程都需要用到参数中的内容
public void init(Context mContext, TencentMap tencentMap, View framNaviView) {
this.mContext = mContext;
this.tencentMap = tencentMap;
this.framNaviView = framNaviView;
this.carNaviView = framNaviView.findViewById(R.id.carnaviview);
this.rideNaviView = framNaviView.findViewById(R.id.ridenaviview);
this.walkNaviView = framNaviView.findViewById(R.id.walknaviview);
}
public void selectNaviType(AppCompatActivity mContext, SelectNaviTypeListener selectNaviTypeListener) {
CustomDialog selectNaviTypeDialog = CustomDialog.build(mContext, R.layout.dialog_select_navi_type, new CustomDialog.OnBindView() {
@Override
@@ -122,12 +116,9 @@ public class NaviUtils {
selectNaviTypeDialog.show();
}
public TencentNaviManager obitainnaviManager(Context mContext, Constant.NAV_TYPE nav_type) {
framNaviView.setVisibility(View.VISIBLE);
carNaviView.setVisibility(View.GONE);
rideNaviView.setVisibility(View.GONE);
walkNaviView.setVisibility(View.GONE);
public TencentNaviManager obitainnaviManager(Activity mContext, Constant.NAV_TYPE nav_type, com.tencent.map.ui.c naviView) {
if (nav_type == Constant.NAV_TYPE.CAR) { // 驾车
CarNaviView carNaviView = (CarNaviView) naviView;
naviManager = new TencentCarNaviManager(mContext);
carNaviView.setVisibility(View.VISIBLE);
naviManager.addNaviView(carNaviView);
@@ -136,13 +127,100 @@ public class NaviUtils {
@Override
public void onBackClick() {
((TencentCarNaviManager)naviManager).stopNavi();
framNaviView.setVisibility(View.GONE);
carNaviView.setVisibility(View.GONE);
SystemTTS.getInstance(mContext).playText("结束导航");
mContext.finish();
}
});
((TencentCarNaviManager)naviManager).addTencentNaviCallback(new TencentNaviCallback() {
@Override
public void onStartNavi() {
}
@Override
public void onStopNavi() {
NaviTts naviTts = new NaviTts();
naviTts.setText("结束导航");
mContext.finish();
}
@Override
public void onOffRoute() {
}
@Override
public void onRecalculateRouteSuccess(int i, ArrayList<RouteData> arrayList) {
}
@Override
public void onRecalculateRouteSuccessInFence(int i) {
}
@Override
public void onRecalculateRouteFailure(int i, int i1, String s) {
}
@Override
public void onRecalculateSuccess(CalcRouteResult calcRouteResult) {
}
@Override
public void onRecalculateFailure(CalcRouteResult calcRouteResult) {
}
@Override
public void onRecalculateRouteStarted(int i) {
}
@Override
public void onRecalculateRouteCanceled() {
}
@Override
public void onArrivedDestination() {
mContext.finish();
}
@Override
public void onPassedWayPoint(int i) {
}
@Override
public void onUpdateRoadType(int i) {
}
@Override
public void onUpdateParallelRoadStatus(ParallelRoadStatus parallelRoadStatus) {
}
@Override
public void onUpdateAttachedLocation(AttachedLocation attachedLocation) {
}
@Override
public void onFollowRouteClick(String s, ArrayList<LatLng> arrayList) {
}
@Override
public int onVoiceBroadcast(NaviTts naviTts) {
return 0;
}
});
} else if (nav_type == Constant.NAV_TYPE.RIDE) { // 骑行
RideNaviView rideNaviView = (RideNaviView) naviView;
naviManager = new TencentRideNaviManager(mContext);
rideNaviView.setVisibility(View.VISIBLE);
((TencentRideNaviManager)naviManager).addTencentNaviListener(rideNaviView);
@@ -151,13 +229,90 @@ public class NaviUtils {
@Override
public void onBackClick() {
((TencentRideNaviManager)naviManager).stopNavi();
framNaviView.setVisibility(View.GONE);
rideNaviView.setVisibility(View.GONE);
SystemTTS.getInstance(mContext).playText("结束导航");
mContext.finish();
}
});
((TencentRideNaviManager) naviManager).addTencentNaviListener(new TencentRideNaviListener() {
@Override
public void onRecalculateRouteSuccess(ArrayList<RouteData> arrayList) {
}
@Override
public void onDirectionUpdateBySensor(float v) {
}
@Override
public void onStartNavi() {
}
@Override
public void onStopNavi() {
NaviTts naviTts = new NaviTts();
naviTts.setText("结束导航");
mContext.finish();
}
@Override
public void onOffRoute() {
}
@Override
public int onVoiceBroadcast(NaviTts naviTts) {
return 0;
}
@Override
public void onArrivedDestination() {
mContext.finish();
}
@Override
public void onUpdateAttachedLocation(AttachedLocation attachedLocation) {
}
@Override
public void onGpsRssiChanged(int i) {
}
@Override
public void onUpdateNavigationData(NavigationData navigationData) {
}
@Override
public void onGpsWeakNotify() {
}
@Override
public void onGpsStrongNotify() {
}
@Override
public void onGpsStatusChanged(boolean b) {
}
@Override
public void onUpdateCurrentRoute(RouteData routeData) {
}
@Override
public void onChangeRes(boolean b) {
}
});
} else {
WalkNaviView walkNaviView = (WalkNaviView) naviView;
naviManager = new TencentRideNaviManager(mContext);
walkNaviView.setVisibility(View.VISIBLE);
((TencentWalkNaviManager)naviManager).addTencentNaviListener(walkNaviView);
@@ -166,15 +321,100 @@ public class NaviUtils {
@Override
public void onBackClick() {
((TencentWalkNaviManager)naviManager).stopNavi();
framNaviView.setVisibility(View.GONE);
walkNaviView.setVisibility(View.GONE);
SystemTTS.getInstance(mContext).playText("结束导航");
mContext.finish();
}
});
((TencentWalkNaviManager) naviManager).addTencentNaviListener(new TencentWalkNaviListener() {
@Override
public void onRecalculateRouteSuccess(ArrayList<RouteData> arrayList) {
}
@Override
public void onDirectionUpdateBySensor(float v) {
}
@Override
public void onStartNavi() {
}
@Override
public void onStopNavi() {
NaviTts naviTts = new NaviTts();
naviTts.setText("结束导航");
mContext.finish();
}
@Override
public void onOffRoute() {
}
@Override
public int onVoiceBroadcast(NaviTts naviTts) {
return 0;
}
@Override
public void onArrivedDestination() {
mContext.finish();
}
@Override
public void onUpdateAttachedLocation(AttachedLocation attachedLocation) {
}
@Override
public void onGpsRssiChanged(int i) {
}
@Override
public void onUpdateNavigationData(NavigationData navigationData) {
}
@Override
public void onGpsWeakNotify() {
}
@Override
public void onGpsStrongNotify() {
}
@Override
public void onGpsStatusChanged(boolean b) {
}
@Override
public void onUpdateCurrentRoute(RouteData routeData) {
}
@Override
public void onChangeRes(boolean b) {
}
});
}
if (tencentMap == null) {
tencentMap = naviView.getMap();
}
if (this.mContext == null) {
this.mContext = mContext;
}
// 开启语音播报
naviManager.setInternalTtsEnabled(true);
naviManager.setIsDefaultRes(true);
naviManager.setUseExtraLocationData(true);
return naviManager;
}
@@ -215,14 +455,14 @@ public class NaviUtils {
try {
// 自动开始导航
if (Constant.currentNaviType == Constant.NAV_TYPE.CAR) {
((TencentCarNaviManager)naviManager).startNavi(0);
// ((TencentCarNaviManager)naviManager).startSimulateNavi(0);
// ((TencentCarNaviManager)naviManager).startNavi(0);
((TencentCarNaviManager)naviManager).startSimulateNavi(0);
} else if (Constant.currentNaviType == Constant.NAV_TYPE.RIDE) {
((TencentRideNaviManager)naviManager).startNavi(0);
// ((TencentRideNaviManager)naviManager).startSimulateNavi(0);
// ((TencentRideNaviManager)naviManager).startNavi(0);
((TencentRideNaviManager)naviManager).startSimulateNavi(0);
} else {
((TencentWalkNaviManager)naviManager).startNavi(0);
// ((TencentWalkNaviManager)naviManager).startSimulateNavi(0);
// ((TencentWalkNaviManager)naviManager).startNavi(0);
((TencentWalkNaviManager)naviManager).startSimulateNavi(0);
}
} catch (Exception e) {