From 7f8c96b23807fff998c56f6fd505474c421cdd2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E5=B2=A9?= Date: Wed, 2 Nov 2022 10:16:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E5=8D=95=E4=B8=AA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AF=BC=E8=88=AA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 18 ++- .../outdoor/activity/HomeActivity.java | 1 + .../outdoor/fragment/GatherGetFragment.java | 28 ++++- .../outdoor/fragment/TreasureFragment.java | 6 + .../com/navinfo/outdoor/util/NaviUtils.java | 104 +++++++++++++++++- .../outdoor/util/TalentLocationUtils.java | 18 ++- .../res/layout/dialog_select_navi_type.xml | 11 +- app/src/main/res/layout/treasure_fragment.xml | 19 ++++ 8 files changed, 185 insertions(+), 20 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 120b92f..90e1696 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,6 +40,14 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } ndkVersion '21.3.6528147' + packagingOptions { + pickFirst 'lib/x86/libc++_shared.so' + pickFirst 'lib/x86_64/libjsc.so' + pickFirst 'lib/arm64-v8a/libjsc.so' + pickFirst 'lib/arm64-v8a/libc++_shared.so' + pickFirst 'lib/x86_64/libc++_shared.so' + pickFirst 'lib/armeabi-v7a/libc++_shared.so' + } } //efs { // //是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启 @@ -118,16 +126,16 @@ dependencies { //腾讯地图 // 地图库 - implementation 'com.tencent.map:tencent-map-vector-sdk:4.4.2' + implementation 'com.tencent.map:tencent-map-vector-sdk:4.5.4' // 地图组件库,包括小车平移、点聚合等组件功能,详见开发指南。 implementation 'com.tencent.map:sdk-utilities:1.0.6' // 导航库 - implementation 'com.tencent.map:tencent-map-nav-sdk:5.3.8.3' + implementation "com.tencent.map:tencent-map-nav-sdk:5.3.8.1" // 导航依赖库 - implementation 'com.tencent.map:tencent-map-nav-surport:1.1.0.1' + implementation 'com.tencent.map:tencent-map-nav-surport:1.0.2.9' - //腾讯地图 定位 - implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.2.6' +// //腾讯地图 定位 +// implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.2.6' // 权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.github.getActivity:XXPermissions:11.6' diff --git a/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java index cb0d2a7..d2f459f 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java @@ -18,6 +18,7 @@ import com.navinfo.outdoor.fragment.TreasureFragment; import com.navinfo.outdoor.http.HttpInterface; import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.util.BackHandlerHelper; +import com.navinfo.outdoor.util.NaviUtils; import com.navinfo.outdoor.util.NoSlideViewPager; import androidx.annotation.NonNull; diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java index 9de5460..ec496a5 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java @@ -45,6 +45,7 @@ import com.navinfo.outdoor.util.TimestampUtil; import com.navinfo.outdoor.util.ToastUtils; import com.tencent.lbssearch.httpresponse.Poi; import com.tencent.map.navi.car.TencentCarNaviManager; +import com.tencent.map.navi.data.NaviPoi; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import org.locationtech.jts.geom.Geometry; @@ -197,17 +198,42 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe NaviUtils.getInstance().selectNaviType((AppCompatActivity) getActivity(), new NaviUtils.SelectNaviTypeListener() { @Override public void selectNaviType(Constant.NAV_TYPE nav_type) { - + // 显示导航类型选择的对话框 + Constant.currentNaviType = nav_type; + startNav(); } }); } else { // 已选择导航方式 + startNav(); } } }); } } + /** + * 开始路径规划 + * */ + private void startNav() { + if (Constant.currentLocation == null) { + ToastUtils.Message(getActivity(), "无法获取当前位置,请检查是否授权应用获取位置权限!"); + return; + } + if (poiEntity == null || poiEntity.getX() == null || poiEntity.getY() == null) { + 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(); + } + } + /** * * */ diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index a02ca76..71df9a4 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -82,6 +82,7 @@ import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.MapManager; import com.navinfo.outdoor.util.MyTecentLocationSource; +import com.navinfo.outdoor.util.NaviUtils; import com.navinfo.outdoor.util.NetWorkUtils; import com.navinfo.outdoor.util.TencentMarkerUtils; import com.navinfo.outdoor.util.TimestampUtil; @@ -282,6 +283,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen initUM(); //检查是否有没有填完的页面 initSharePre(); + // 初始化导航工具类 + NaviUtils.getInstance().init(getActivity(), tencentMap, findViewById(R.id.fram_navi_view)); } @Override @@ -307,6 +310,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen imgAutoMatchRoad.setVisibility(View.VISIBLE); } imgAutoMatchRoad.setOnClickListener(new View.OnClickListener() { + @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onClick(View v) { Intent autoMatchIntent = new Intent(getContext(), AutoTakePictureActivity.class); @@ -1148,6 +1152,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } removableScreenMarker.clear(); } + // 如果当前正在导航,自动停止 + NaviUtils.getInstance().stopNavi(); } @Override diff --git a/app/src/main/java/com/navinfo/outdoor/util/NaviUtils.java b/app/src/main/java/com/navinfo/outdoor/util/NaviUtils.java index 12c373f..a0aad16 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/NaviUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/NaviUtils.java @@ -14,8 +14,10 @@ import com.kongzue.dialog.v3.CustomDialog; 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.TencentNaviManager; import com.tencent.map.navi.TencentRouteSearchCallback; +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.CalcRouteResult; @@ -23,9 +25,12 @@ import com.tencent.map.navi.data.NaviPoi; import com.tencent.map.navi.data.RouteColors; import com.tencent.map.navi.data.RouteData; import com.tencent.map.navi.data.TrafficItem; +import com.tencent.map.navi.ride.RideNaviView; import com.tencent.map.navi.ride.RideRouteSearchOptions; import com.tencent.map.navi.ride.TencentRideNaviManager; +import com.tencent.map.navi.ui.car.CarNaviInfoPanel; import com.tencent.map.navi.walk.TencentWalkNaviManager; +import com.tencent.map.navi.walk.WalkNaviView; import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; @@ -42,6 +47,11 @@ 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) { instance = new NaviUtils(); @@ -49,9 +59,14 @@ public class NaviUtils { return instance; } - public void init(Context mContext, TencentMap tencentMap) { + // 在调用路径规划和导航前必须提前调用该方法,后续流程都需要用到参数中的内容 + 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) { @@ -102,19 +117,64 @@ public class NaviUtils { } }); } - }); + }) + .setCancelable(false); selectNaviTypeDialog.show(); } public TencentNaviManager obitainnaviManager(Context mContext, Constant.NAV_TYPE nav_type) { - TencentNaviManager naviManager = null; - if (nav_type == Constant.NAV_TYPE.CAR) { + framNaviView.setVisibility(View.VISIBLE); + carNaviView.setVisibility(View.GONE); + rideNaviView.setVisibility(View.GONE); + walkNaviView.setVisibility(View.GONE); + if (nav_type == Constant.NAV_TYPE.CAR) { // 驾车 naviManager = new TencentCarNaviManager(mContext); - } else if (nav_type == Constant.NAV_TYPE.RIDE) { + carNaviView.setVisibility(View.VISIBLE); + naviManager.addNaviView(carNaviView); + CarNaviInfoPanel carNaviInfoPanel = carNaviView.showNaviInfoPanel(); + carNaviInfoPanel.setOnNaviInfoListener(new CarNaviInfoPanel.OnNaviInfoListener() { + @Override + public void onBackClick() { + ((TencentCarNaviManager)naviManager).stopNavi(); + + framNaviView.setVisibility(View.GONE); + carNaviView.setVisibility(View.GONE); + SystemTTS.getInstance(mContext).playText("结束导航"); + } + }); + } else if (nav_type == Constant.NAV_TYPE.RIDE) { // 骑行 naviManager = new TencentRideNaviManager(mContext); + rideNaviView.setVisibility(View.VISIBLE); + ((TencentRideNaviManager)naviManager).addTencentNaviListener(rideNaviView); + CarNaviInfoPanel carNaviInfoPanel = rideNaviView.showNaviInfoPanel(); + carNaviInfoPanel.setOnNaviInfoListener(new CarNaviInfoPanel.OnNaviInfoListener() { + @Override + public void onBackClick() { + ((TencentRideNaviManager)naviManager).stopNavi(); + + framNaviView.setVisibility(View.GONE); + rideNaviView.setVisibility(View.GONE); + SystemTTS.getInstance(mContext).playText("结束导航"); + } + }); } else { naviManager = new TencentRideNaviManager(mContext); + walkNaviView.setVisibility(View.VISIBLE); + ((TencentWalkNaviManager)naviManager).addTencentNaviListener(walkNaviView); + CarNaviInfoPanel carNaviInfoPanel = walkNaviView.showNaviInfoPanel(); + carNaviInfoPanel.setOnNaviInfoListener(new CarNaviInfoPanel.OnNaviInfoListener() { + @Override + public void onBackClick() { + ((TencentWalkNaviManager)naviManager).stopNavi(); + + framNaviView.setVisibility(View.GONE); + walkNaviView.setVisibility(View.GONE); + SystemTTS.getInstance(mContext).playText("结束导航"); + } + }); } + // 开启语音播报 + naviManager.setInternalTtsEnabled(true); return naviManager; } @@ -152,6 +212,21 @@ public class NaviUtils { // 添加道路Route到地图,默认选取第一条 addRoutes(arrayList); zoomToRoute(arrayList.get(0)); + try { + // 自动开始导航 + if (Constant.currentNaviType == Constant.NAV_TYPE.CAR) { + ((TencentCarNaviManager)naviManager).startNavi(0); +// ((TencentCarNaviManager)naviManager).startSimulateNavi(0); + } else if (Constant.currentNaviType == Constant.NAV_TYPE.RIDE) { + ((TencentRideNaviManager)naviManager).startNavi(0); +// ((TencentRideNaviManager)naviManager).startSimulateNavi(0); + } else { + ((TencentWalkNaviManager)naviManager).startNavi(0); +// ((TencentWalkNaviManager)naviManager).startSimulateNavi(0); + } + } catch (Exception e) { + + } // addMarkerStart(start.getLatitude(),start.getLongitude()); // addMarkerDestination(dest.getLatitude(),dest.getLongitude()); // addMarkerPass(wayPoints); @@ -294,6 +369,25 @@ public class NaviUtils { } return trafficItems; } + + public void stopNavi() { + if (naviManager!=null&&naviManager.isNavigating()) { + if (Constant.currentNaviType == Constant.NAV_TYPE.CAR) { + ((TencentCarNaviManager)naviManager).stopNavi(); + } else if (Constant.currentNaviType == Constant.NAV_TYPE.RIDE) { + ((TencentRideNaviManager)naviManager).stopNavi(); + } else if (Constant.currentNaviType == Constant.NAV_TYPE.WALK) { + ((TencentWalkNaviManager)naviManager).stopNavi(); + } + } + } + + private TencentNaviManager getNaviManager() { + if (naviManager!=null) { + return naviManager; + } + return null; + } public interface SelectNaviTypeListener { void selectNaviType(Constant.NAV_TYPE nav_type); } diff --git a/app/src/main/java/com/navinfo/outdoor/util/TalentLocationUtils.java b/app/src/main/java/com/navinfo/outdoor/util/TalentLocationUtils.java index 1faac44..285abdd 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/TalentLocationUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/TalentLocationUtils.java @@ -18,7 +18,7 @@ import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; -public class TalentLocationUtils implements TencentLocationListener{ +public class TalentLocationUtils implements TencentLocationListener { private TencentLocationManager locationManager; private TencentLocationRequest locationRequest; private List locationChangedListenerList; @@ -38,7 +38,7 @@ public class TalentLocationUtils implements TencentLocationListener{ private void init(Context mContext) { locationChangedListenerList = new ArrayList<>(); //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 - locationManager = TencentLocationManager.getInstance(mContext); + locationManager = TencentLocationManager.getInstance(mContext, null); //设置坐标系 locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); //创建定位请求 @@ -46,7 +46,7 @@ public class TalentLocationUtils implements TencentLocationListener{ locationRequest.setInterval(1000); // 每1秒返回一次地址数据 locationRequest.setAllowDirection(true); locationRequest.setAllowGPS(true); - locationRequest.setIndoorLocationMode(true); +// locationRequest.setIndoorLocationMode(true); } public void startLocation(Context mContext) { // 启动定位服务 @@ -54,7 +54,7 @@ public class TalentLocationUtils implements TencentLocationListener{ this.init(mContext); } if (!isLocationStart) { - int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper(), 0); isLocationStart = true; switch (err) { case 1: @@ -138,6 +138,16 @@ public class TalentLocationUtils implements TencentLocationListener{ Log.v("State changed", s + "===" + s1); } + @Override + public void onGnssInfoChanged(Object o) { + + } + + @Override + public void onNmeaMsgChanged(String s) { + + } + public List getLocationChangedListenerList() { return locationChangedListenerList; } diff --git a/app/src/main/res/layout/dialog_select_navi_type.xml b/app/src/main/res/layout/dialog_select_navi_type.xml index 031b9bc..6572f85 100644 --- a/app/src/main/res/layout/dialog_select_navi_type.xml +++ b/app/src/main/res/layout/dialog_select_navi_type.xml @@ -1,8 +1,9 @@ + android:background="@drawable/selector_hui_bg" + android:layout_width="match_parent" + android:layout_height="wrap_content"> @@ -32,7 +33,7 @@ android:id="@+id/navi_type_ride" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:button="null" + android:button="@null" android:text="骑行" android:layout_marginHorizontal="@dimen/fab_margin" android:background="@drawable/selector_default_btn_round_corner_bg" @@ -41,7 +42,7 @@ android:id="@+id/navi_type_walk" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:button="null" + android:button="@null" android:text="步行" android:background="@drawable/selector_default_btn_round_corner_bg" style="@style/btn_round_corner"> diff --git a/app/src/main/res/layout/treasure_fragment.xml b/app/src/main/res/layout/treasure_fragment.xml index b4b7324..a693027 100644 --- a/app/src/main/res/layout/treasure_fragment.xml +++ b/app/src/main/res/layout/treasure_fragment.xml @@ -163,6 +163,25 @@ app:layout_constraintLeft_toLeftOf="@id/iv_refrish" app:layout_constraintTop_toBottomOf="@id/iv_refrish" /> + + + + + +