This commit is contained in:
wangcongtao
2020-03-14 17:28:35 +08:00
parent 64048f48dd
commit 22d67860b1
12 changed files with 179 additions and 16 deletions

View File

@@ -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 );
}
}

View File

@@ -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<MogoLatLng> 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() {

View File

@@ -0,0 +1,14 @@
package com.mogo.map.navi;
import com.mogo.map.MogoLatLng;
/**
* @author congtaowang
* @since 2020-03-14
* <p>
* 车辆位置变化
*/
public interface IMogoCarLocationChangedListener {
void onCarLocationChanged( MogoLatLng latLng );
}

View File

@@ -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<MogoLatLng> getNaviPathCoordinates();
List< MogoLatLng > getNaviPathCoordinates();
/**
* 获取车标经纬度
*
* @return
*/
MogoLatLng getCarLocation();
/**
* 注册车辆位置变化监听,非业务使用
*
* @param listener
*/
void registerCarLocationChangedListener( IMogoCarLocationChangedListener listener );
}

View File

@@ -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 );
}
}
}

View File

@@ -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;

View File

@@ -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( () -> {

View File

@@ -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 {
/**
* 地图加载完成回调

View File

@@ -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();
}
}
}
}

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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 );
}