fix: 增加单个数据导航功能
This commit is contained in:
parent
c503bff070
commit
7f8c96b238
@ -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'
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* */
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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<LocationSource.OnLocationChangedListener> 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<LocationSource.OnLocationChangedListener> getLocationChangedListenerList() {
|
||||
return locationChangedListenerList;
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:padding="@dimen/default_widget_padding"
|
||||
android:layout_height="match_parent">
|
||||
android:background="@drawable/selector_hui_bg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/navi_type_title"
|
||||
@ -24,7 +25,7 @@
|
||||
android:id="@+id/navi_type_car"
|
||||
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"></RadioButton>
|
||||
@ -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"></RadioButton>
|
||||
|
@ -163,6 +163,25 @@
|
||||
app:layout_constraintLeft_toLeftOf="@id/iv_refrish"
|
||||
app:layout_constraintTop_toBottomOf="@id/iv_refrish" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fram_navi_view"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<com.tencent.map.navi.car.CarNaviView
|
||||
android:id="@+id/carnaviview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
<com.tencent.map.navi.ride.RideNaviView
|
||||
android:id="@+id/ridenaviview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
<com.tencent.map.navi.walk.WalkNaviView
|
||||
android:id="@+id/walknaviview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
Loading…
x
Reference in New Issue
Block a user