diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessClient.java new file mode 100644 index 0000000000..98716e31ee --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessClient.java @@ -0,0 +1,130 @@ +package com.mogo.map.impl.amap.navi; + +import android.content.Context; + +import com.amap.api.navi.AMapNavi; +import com.amap.api.navi.enums.AimLessMode; +import com.mogo.map.navi.IMogoAimless; +import com.mogo.utils.logger.Logger; +import com.mogo.utils.storage.SharedPrefsMgr; + +/** + * @author donghongyu + * @since 2020-11-05 + *
+ * 高德巡航 + */ +public class AimlessClient implements IMogoAimless { + + /** + * 巡航状态控制 + */ + public static final String KEY_AIMLESS_STATUS = "KEY_AIMLESS_STATUS"; + + private static final String TAG = "AimlessClient"; + private final Context mContext; + + private AMapNavi mAMapNavi; + + private AimlessModeListenerAdapter mAimlessModeListener; + + private static volatile AimlessClient sInstance; + + /** + * 巡航模式配置状态 + */ + private boolean mAimlessModeStatus; + + /** + * 巡航状态 + */ + private boolean mAimlessStatus; + + private AimlessClient(Context context) { + mContext = context.getApplicationContext(); + // 按需初始化高德导航组件 + initAMapNavi(); + } + + /** + * 初始化导航组件 + */ + private void initAMapNavi() { + Logger.d(TAG, "initAMapNavi"); + if (mAMapNavi != null) { + return; + } + mAMapNavi = AMapNavi.getInstance(mContext); + mAMapNavi.setEmulatorNaviSpeed(120); + mAMapNavi.setUseInnerVoice(true, true); +// mAMapNavi.stopSpeak(); + mAimlessModeListener = new AimlessModeListenerAdapter() { + }; + mAMapNavi.addAimlessModeListener(mAimlessModeListener); + mAimlessModeStatus = SharedPrefsMgr.getInstance(mContext).getBoolean(KEY_AIMLESS_STATUS, false); + } + + public static AimlessClient getInstance(Context context) { + if (sInstance == null) { + synchronized (AimlessClient.class) { + if (sInstance == null) { + sInstance = new AimlessClient(context); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private boolean checkAMapNavi() { + if (mAMapNavi == null) { + Logger.e(TAG, "高德导航实例为空!!!"); + return false; + } + return true; + } + + @Override + public void startAimlessMode() { + if (!checkAMapNavi()) { + return; + } + if (mAimlessModeStatus) { + mAMapNavi.startAimlessMode(AimLessMode.CAMERA_AND_SPECIALROAD_DETECTED); + mAimlessStatus = true; + Logger.d(TAG, "开启巡航成功"); + } else { + mAimlessStatus = false; + Logger.d(TAG, "开启巡航失败"); + } + } + + @Override + public void stopAimlessMode() { + if (!checkAMapNavi()) { + return; + } + mAMapNavi.stopAimlessMode(); + mAimlessStatus = false; + Logger.d(TAG, "关闭巡航成功"); + } + + @Override + public void setAimlessModeStatus(boolean open) { + this.mAimlessModeStatus = open; + SharedPrefsMgr.getInstance(mContext).putBoolean(KEY_AIMLESS_STATUS, open); + if (open) { + if (!mAimlessStatus) { + startAimlessMode(); + } + } else { + if (mAimlessStatus) { + stopAimlessMode(); + } + } + } + +} diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessModeListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessModeListenerAdapter.java index 675db2d3dd..2abaa2728c 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessModeListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AimlessModeListenerAdapter.java @@ -44,7 +44,6 @@ public class AimlessModeListenerAdapter implements AimlessModeListener { @Override public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) { Logger.d( TAG, "updateAimlessModeCongestionInfo " + GsonUtil.jsonFromObject(aimLessModeCongestionInfo)); - MogoCongestionInfo congestionInfo = ObjectUtils.fromAMap( aimLessModeCongestionInfo ); if ( congestionInfo != null ) { MogoNaviListenerHandler.getInstance().onUpdateCongestion( congestionInfo ); 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 5016380246..8c00446e99 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 @@ -13,12 +13,10 @@ import com.amap.api.navi.model.AMapNaviPath; import com.amap.api.navi.model.NaviLatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.voice.AIAssist; import com.mogo.map.MogoLatLng; import com.mogo.map.impl.amap.AMapWrapper; import com.mogo.map.impl.amap.message.AMapMessageManager; import com.mogo.map.impl.amap.utils.ObjectUtils; -import com.mogo.map.navi.IMogoCarLocationChangedListener; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.MogoCalculatePath; diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimless.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimless.java new file mode 100644 index 0000000000..ede5226af8 --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimless.java @@ -0,0 +1,28 @@ +package com.mogo.map.navi; + +/** + * @author donghongyu + * @since 2020-11-05 + *
+ * 巡航操作 + */ +public interface IMogoAimless { + + /** + * 打开巡航模式 + */ + void startAimlessMode(); + + /** + * 关闭巡航模式 + */ + void stopAimlessMode(); + + /** + * 设置巡航模式状态 + * + * @param open + */ + void setAimlessModeStatus(boolean open); + +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoAimless.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoAimless.java new file mode 100644 index 0000000000..31aba24a1a --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoAimless.java @@ -0,0 +1,60 @@ +package com.mogo.map; + +import android.content.Context; + +import com.mogo.map.impl.amap.navi.AimlessClient; +import com.mogo.map.navi.IMogoAimless; +import com.mogo.map.navi.IMogoNavi; + +/** + * @author donghongyu + * @since 2020-11-05 + *
+ * 巡航代理 + */ +public class MogoAimless implements IMogoAimless { + + private IMogoAimless mDelegate; + + private static volatile MogoAimless sInstance; + + private MogoAimless(Context context) { + mDelegate = AimlessClient.getInstance(context); + } + + public static MogoAimless getInstance(Context context) { + if (sInstance == null) { + synchronized (MogoAimless.class) { + if (sInstance == null) { + sInstance = new MogoAimless(context); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + @Override + public void startAimlessMode() { + if (mDelegate != null) { + mDelegate.startAimlessMode(); + } + } + + @Override + public void stopAimlessMode() { + if (mDelegate != null) { + mDelegate.stopAimlessMode(); + } + } + + @Override + public void setAimlessModeStatus(boolean open) { + if (mDelegate != null) { + mDelegate.setAimlessModeStatus(open); + } + } +} 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 8880284851..402feac710 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 @@ -1,8 +1,6 @@ package com.mogo.map; import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; import android.graphics.Rect; import android.location.Location; diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/GaoDeAimlessProvider.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/GaoDeAimlessProvider.java index 3343b4dc85..c38dce2ac8 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/GaoDeAimlessProvider.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/GaoDeAimlessProvider.java @@ -8,7 +8,9 @@ import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.map.navi.IMogoAimlessModeListener; import com.mogo.map.navi.MogoCongestionInfo; import com.mogo.map.navi.MogoTraffic; +import com.mogo.module.common.MogoApisHandler; import com.mogo.service.MogoServicePaths; +import com.mogo.utils.network.utils.GsonUtil; /** * TODO 高德巡航信息监听,并将拥堵信息上报到服务端 @@ -20,9 +22,17 @@ public class GaoDeAimlessProvider implements IProvider { @Override public void init(Context context) { Log.d(TAG, "provider init……"); + // 开启巡航监听 + MogoApisHandler.getInstance() + .getApis() + .getMapServiceApi() + .getAimless(context) + .setAimlessModeStatus(true); // 注册高德巡航回调 - TanluServiceManager.getIMogoRegisterCenter() + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() .registerMogoAimlessModeListener(TAG, new IMogoAimlessModeListener() { @Override public void onUpdateTraffic2(MogoTraffic traffic) { @@ -32,6 +42,7 @@ public class GaoDeAimlessProvider implements IProvider { @Override public void onUpdateCongestion(MogoCongestionInfo info) { // TODO 上报给服务器 + Log.d(TAG, GsonUtil.jsonFromObject(info)); } }); diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/TanluServiceManager.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/TanluServiceManager.java index b75837320d..b726823121 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/TanluServiceManager.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/TanluServiceManager.java @@ -4,6 +4,7 @@ import android.content.Context; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.map.location.IMogoLocationClient; +import com.mogo.map.navi.IMogoAimless; import com.mogo.map.search.poisearch.IMogoPoiSearch; import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery; import com.mogo.service.IMogoServiceApis; @@ -31,6 +32,7 @@ public class TanluServiceManager { private static IMogoIntentManager mogoIntentManager; private static IMogoRegisterCenter mogoRegisterCenter; private static IMogoTopViewManager mIMogoTopViewManager; + private static IMogoAimless mIMogoAimless; public static void init(Context context) { mServiceApis = (IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context); @@ -39,6 +41,7 @@ public class TanluServiceManager { mAnalytics = mServiceApis.getAnalyticsApi(); mogoIntentManager = mServiceApis.getIntentManagerApi(); mogoRegisterCenter = mServiceApis.getRegisterCenterApi(); + mIMogoAimless = mMapService.getAimless(context); mIMogoTopViewManager = mServiceApis.getTopViewManager(); mPoiSearch = mMapService.getPoiSearch(context, new MogoPoiSearchQuery()); @@ -81,4 +84,7 @@ public class TanluServiceManager { return mServiceApis; } + public static IMogoAimless getMogoAimless() { + return mIMogoAimless; + } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java index fc0f61d014..5d59cfc80a 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java @@ -7,6 +7,7 @@ import com.mogo.map.IMogoMapViewInstanceHandler; import com.mogo.map.listener.IMogoHosListenerRegister; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; +import com.mogo.map.navi.IMogoAimless; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.search.drive.IMogoRoadSearch; @@ -77,6 +78,14 @@ public interface IMogoMapService extends IProvider { */ IMogoNavi getNavi( Context context ); + /** + * 获取巡航操作实例 + * + * @param context + * @return + */ + IMogoAimless getAimless(Context context); + /** * marker 操作 * diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java index 4038c5533d..4304befed9 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java @@ -4,6 +4,7 @@ import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.map.IMogoMapViewInstanceHandler; +import com.mogo.map.MogoAimless; import com.mogo.map.MogoGeoSearch; import com.mogo.map.MogoInputtipsSearch; import com.mogo.map.MogoLocationClient; @@ -18,6 +19,7 @@ import com.mogo.map.listener.IMogoHosListenerRegister; import com.mogo.map.listener.MogoHosListenerRegister; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; +import com.mogo.map.navi.IMogoAimless; import com.mogo.map.navi.IMogoNavi; import com.mogo.map.overlay.IMogoOverlayManager; import com.mogo.map.search.drive.IMogoRoadSearch; @@ -69,6 +71,11 @@ public class MogoMapService implements IMogoMapService { return MogoNavi.getInstance( context ); } + @Override + public IMogoAimless getAimless(Context context) { + return MogoAimless.getInstance( context ); + } + @Override public IMogoMarkerManager getMarkerManager( Context context ) { return MogoMarkerManager.getInstance( context );