From 22d67860b12dbd852176295518674d67b7b20743 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Sat, 14 Mar 2020 17:28:35 +0800 Subject: [PATCH] nothing --- .../map/impl/amap/AMapNaviViewWrapper.java | 11 ++++-- .../mogo/map/impl/amap/navi/NaviClient.java | 35 ++++++++++++++++--- .../navi/IMogoCarLocationChangedListener.java | 14 ++++++++ .../java/com/mogo/map/navi/IMogoNavi.java | 23 +++++++++--- .../src/main/java/com/mogo/map/MogoNavi.java | 16 +++++++++ .../extensions/entrance/EntranceFragment.java | 8 +++++ .../com/mogo/module/main/MainActivity.java | 1 + .../module/main/cards/MogoModulesHandler.java | 4 ++- .../module/main/cards/MogoModulesManager.java | 35 ++++++++++++++++--- .../registercenter/MogoRegisterCenter.java | 13 ++++++- .../MogoRegisterCenterHandler.java | 19 ++++++++++ .../service/module/IMogoRegisterCenter.java | 16 +++++++++ 12 files changed, 179 insertions(+), 16 deletions(-) create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener.java diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index 0372f8297e..2bf7e4d6bc 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -75,7 +75,8 @@ public class AMapNaviViewWrapper implements IMogoMapView, AMap.OnPolylineClickListener, AMapNaviViewListener, AMapMessageListener, - AMap.OnCameraChangeListener { + AMap.OnCameraChangeListener, + AMap.OnMyLocationChangeListener{ private static final String TAG = "AMapNaviViewWrapper"; @@ -176,6 +177,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, aMap.setOnPOIClickListener( this ); aMap.setOnMapClickListener( this ); aMap.setOnCameraChangeListener( this ); + aMap.setOnMyLocationChangeListener( this ); } AMapMessageManager.getInstance().registerAMapMessageListener( this ); } @@ -469,7 +471,7 @@ public class AMapNaviViewWrapper implements IMogoMapView, mMapView.getMap().setMyLocationEnabled( true ); MyLocationStyle style = mMapView.getMap().getMyLocationStyle(); style.myLocationType( MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER ); - style.interval( 500 ); + style.interval( 1000 ); style.anchor( 0.5F, 0.5F ); style.strokeColor( Color.TRANSPARENT ); style.strokeWidth( 0 ); @@ -702,4 +704,9 @@ public class AMapNaviViewWrapper implements IMogoMapView, } return AMapUtils.calculateLineDistance( ObjectUtils.fromMogo2( p1 ), ObjectUtils.fromMogo2( p2 ) ); } + + @Override + public void onMyLocationChange( Location location ) { + NaviClient.getInstance( getContext() ).syncCarLocation( location ); + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java index 75975a1be4..f5cc05b264 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java @@ -2,14 +2,15 @@ package com.mogo.map.impl.amap.navi; import android.content.Context; import android.graphics.Rect; +import android.location.Location; import com.amap.api.maps.model.Polyline; import com.amap.api.navi.AMapNavi; -import com.amap.api.navi.enums.AimLessMode; import com.amap.api.navi.enums.NaviType; import com.amap.api.navi.model.NaviLatLng; import com.mogo.map.MogoLatLng; import com.mogo.map.impl.amap.utils.ObjectUtils; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.MogoCalculatePath; import com.mogo.map.navi.MogoNaviConfig; @@ -44,6 +45,9 @@ public class NaviClient implements IMogoNavi { private static volatile NaviClient sInstance; private boolean mIsRealNavi; + private Location mCarLocation; + private IMogoCarLocationChangedListener mCarLocationChangedListener; + private NaviClient( Context context ) { mAMapNavi = AMapNavi.getInstance( context ); //mAMapNavi.setEmulatorNaviSpeed( 120 ); @@ -165,7 +169,8 @@ public class NaviClient implements IMogoNavi { return null; } - @Override public List getCalculatedPathPos() { + @Override + public List< MogoLatLng > getCalculatedPathPos() { if ( mAMapNaviListener != null ) { return mAMapNaviListener.getCalculatedPathPos(); } @@ -216,8 +221,30 @@ public class NaviClient implements IMogoNavi { return null; } + @Override + public MogoLatLng getCarLocation() { + if ( mCarLocation != null ) { + synchronized ( mCarLocation ) { + return new MogoLatLng( mCarLocation.getLatitude(), mCarLocation.getLongitude() ); + } + } + return null; + } + + @Override + public void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener ) { + mCarLocationChangedListener = listener; + } + // -- end + public void syncCarLocation( Location location ) { + mCarLocation = location; + if ( mCarLocationChangedListener != null ) { + mCarLocationChangedListener.onCarLocationChanged( getCarLocation() ); + } + } + private boolean checkAMapNavi() { if ( mAMapNavi == null ) { Logger.e( TAG, "高德导航实例为空!!!" ); @@ -236,8 +263,8 @@ public class NaviClient implements IMogoNavi { } } - public void startAimlessMode(int cameraAndSpecialroadDetected) { - mAMapNavi.startAimlessMode(cameraAndSpecialroadDetected); + public void startAimlessMode( int cameraAndSpecialroadDetected ) { + mAMapNavi.startAimlessMode( cameraAndSpecialroadDetected ); } public void stopAimlessMode() { diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener.java new file mode 100644 index 0000000000..30a1581828 --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListener.java @@ -0,0 +1,14 @@ +package com.mogo.map.navi; + +import com.mogo.map.MogoLatLng; + +/** + * @author congtaowang + * @since 2020-03-14 + *

+ * 车辆位置变化 + */ +public interface IMogoCarLocationChangedListener { + + void onCarLocationChanged( MogoLatLng latLng ); +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java index 005f123135..88f00f47d8 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java @@ -80,7 +80,6 @@ public interface IMogoNavi { List< MogoCalculatePath > getCalculatedStrategies(); - /** * 获取路线坐标点 * @@ -89,7 +88,6 @@ public interface IMogoNavi { List< MogoLatLng > getCalculatedPathPos(); - /** * 获取列表Item点击回调 * @@ -117,20 +115,37 @@ public interface IMogoNavi { /** * 导航配置 + * * @return */ MogoNaviConfig getNaviConfig(); /** * 设置播报模式 + * * @param mode * @return */ - boolean setBroadcastMode(int mode); + boolean setBroadcastMode( int mode ); /** * 获取导航沿途路线的点 + * * @return */ - List getNaviPathCoordinates(); + List< MogoLatLng > getNaviPathCoordinates(); + + /** + * 获取车标经纬度 + * + * @return + */ + MogoLatLng getCarLocation(); + + /** + * 注册车辆位置变化监听,非业务使用 + * + * @param listener + */ + void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener ); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java index 8aaac07801..9b2cc00d8d 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Rect; import com.mogo.map.impl.amap.navi.NaviClient; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.MogoCalculatePath; import com.mogo.map.navi.MogoNaviConfig; @@ -164,4 +165,19 @@ public class MogoNavi implements IMogoNavi { } return null; } + + @Override + public MogoLatLng getCarLocation() { + if ( mDelegate != null ) { + return mDelegate.getCarLocation(); + } + return null; + } + + @Override + public void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener ) { + if ( mDelegate != null ) { + mDelegate.registerCarLocationChangedListener( listener ); + } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 1b576b3f47..fb434d191c 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -1,5 +1,6 @@ package com.mogo.module.extensions.entrance; +import android.graphics.Color; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; @@ -21,6 +22,8 @@ import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.navi.MogoNaviInfo; import com.mogo.map.navi.MogoTraffic; +import com.mogo.map.overlay.IMogoPolyline; +import com.mogo.map.overlay.MogoPolylineOptions; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoModulePaths; @@ -40,7 +43,10 @@ import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusManager; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -93,6 +99,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private boolean mIsLock = true; private TextView ivMode; + private IMogoPolyline iMogoPolyline; + @Override protected int getLayoutId() { return R.layout.module_ext_layout_entrance; diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 0b5c5734dd..8d13c26f9c 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -225,6 +225,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler ); mMogoMapService.getHostListenerRegister().registerHostAimlessModeListener( mMogoModuleHandler ); mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this ); + mMogoMapService.getNavi( this ).registerCarLocationChangedListener( mMogoModuleHandler ); } mMogoModuleHandler.setMapLoadedCallback( () -> { diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java index 05b4af9399..06f4296965 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java @@ -6,6 +6,7 @@ import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoAimlessModeListener; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.module.IMogoModuleProvider; @@ -24,7 +25,8 @@ public interface MogoModulesHandler extends IMogoMapListener, IMogoNaviListener, IMogoLocationListener, IMogoMarkerClickListener, - IMogoAimlessModeListener { + IMogoAimlessModeListener, + IMogoCarLocationChangedListener { /** * 地图加载完成回调 diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index 2b34ce4a69..b932dcf256 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -17,6 +17,7 @@ import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.model.MogoPoi; import com.mogo.map.navi.IMogoAimlessModeListener; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.navi.MogoCongestionInfo; import com.mogo.map.navi.MogoNaviInfo; @@ -624,8 +625,12 @@ public class MogoModulesManager implements MogoModulesHandler, } while ( iterator.hasNext() ) { IMogoAimlessModeListener listener = iterator.next(); - if ( listener == null ) { - listener.onUpdateTraffic2( traffic ); + if ( listener != null ) { + try { + listener.onUpdateTraffic2( traffic ); + } catch ( Exception e ) { + e.printStackTrace(); + } } } } @@ -638,8 +643,30 @@ public class MogoModulesManager implements MogoModulesHandler, } while ( iterator.hasNext() ) { IMogoAimlessModeListener listener = iterator.next(); - if ( listener == null ) { - listener.onUpdateCongestion( info ); + if ( listener != null ) { + try { + listener.onUpdateCongestion( info ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + } + } + + @Override + public void onCarLocationChanged( MogoLatLng latLng ) { + Iterator< IMogoCarLocationChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getCarLocationChangedListener(); + if ( iterator == null ) { + return; + } + while ( iterator.hasNext() ) { + IMogoCarLocationChangedListener listener = iterator.next(); + if ( listener != null ) { + try { + listener.onCarLocationChanged( latLng ); + } catch ( Exception e ) { + e.printStackTrace(); + } } } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java index 223aeaf2ed..8ab4a9e5b4 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java @@ -7,6 +7,7 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoAimlessModeListener; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.MogoServicePaths; import com.mogo.service.module.IMogoModuleLifecycle; @@ -73,12 +74,22 @@ public class MogoRegisterCenter implements IMogoRegisterCenter { @Override public void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener ) { - + MogoRegisterCenterHandler.getInstance().registerMogoAimlessModeListener( tag, listener ); } @Override public void unregisterMogoAimlessModeListener( String tag ) { + MogoRegisterCenterHandler.getInstance().unregisterMogoAimlessModeListener( tag ); + } + @Override + public void registerCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ) { + MogoRegisterCenterHandler.getInstance().registerCarLocationChangedListener( tag, listener); + } + + @Override + public void unregisterCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ) { + MogoRegisterCenterHandler.getInstance().unregisterCarLocationChangedListener( tag, listener ); } @Override diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java index 52e2d0a00e..8a15cf5679 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java @@ -6,6 +6,7 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoAimlessModeListener; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.module.IMogoRegisterCenter; @@ -30,6 +31,7 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter { private Map< String, IMogoLocationListener > mLocation = new HashMap<>(); private Map< String, IMogoMarkerClickListener > mMarker = new HashMap<>(); private Map< String, IMogoAimlessModeListener > mAimless = new HashMap<>(); + private Map< String, IMogoCarLocationChangedListener > mCarLocations = new HashMap<>(); private MogoRegisterCenterHandler() { } @@ -110,6 +112,16 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter { mAimless.remove( tag ); } + @Override + public void registerCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ) { + mCarLocations.put( tag, listener ); + } + + @Override + public void unregisterCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ) { + mCarLocations.remove( tag ); + } + @Override public void init( Context context ) { } @@ -157,4 +169,11 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter { public Iterator< IMogoAimlessModeListener > getAimlessModeListeners() { return mAimless.values().iterator(); } + + + public Iterator< IMogoCarLocationChangedListener > getCarLocationChangedListener() { + return mCarLocations.values().iterator(); + } + + } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java index 360b0e5126..30cf128fb6 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java @@ -5,6 +5,7 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.navi.IMogoAimlessModeListener; +import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoNaviListener; /** @@ -110,5 +111,20 @@ public interface IMogoRegisterCenter extends IProvider { */ void unregisterMogoAimlessModeListener( String tag ); + /** + * 注册车辆位置变化监听 + * + * @param tag + * @param listener + */ + void registerCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ); + + /** + * 注销车辆位置变化监听 + * + * @param tag + * @param listener + */ + void unregisterCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener ); }