From 6faffc6f0c21a2127d612b6eff915b276f97e2bc Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 6 Sep 2023 19:45:31 +0800 Subject: [PATCH] =?UTF-8?q?[600][adas]=E6=B7=BB=E5=8A=A0=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E7=9B=91=E5=90=AC=EF=BC=8C=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=88=B0=E7=BD=91=E7=BB=9C=E8=BF=9E=E6=8E=A5=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=E7=AB=8B=E5=8D=B3=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotControlProvider.kt | 10 ++--- .../mogo-adas/src/main/AndroidManifest.xml | 1 + .../zhidao/support/adas/high/AdasChannel.java | 8 +++- .../zhidao/support/adas/high/AdasManager.java | 4 +- .../adas/high/common/ReconnectManager.java | 41 +++++++++++++++++-- .../support/adas/high/socket/FpgaSocket.java | 13 +++--- 6 files changed, 58 insertions(+), 19 deletions(-) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index c7e3d6b130..a0ac3c0b7f 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -122,7 +122,7 @@ class MoGoAutopilotControlProvider : // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// .build() - AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) + AdasManager.getInstance().create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) @@ -209,7 +209,7 @@ class MoGoAutopilotControlProvider : UiThreadHandler.post { if (isSupportMulti) { // 直连工控机 - directConnect() + directConnect(context) } else { val options = AdasOptions .Builder() @@ -217,7 +217,7 @@ class MoGoAutopilotControlProvider : .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance() - .create(options, MoGoAdasMsgConnectStatusListenerImpl()) + .create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) // 接收司机屏发过来的感知、定位等数据 @@ -240,7 +240,7 @@ class MoGoAutopilotControlProvider : } } - private fun directConnect() { + private fun directConnect(context: Context) { val options = AdasOptions .Builder() .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) @@ -248,7 +248,7 @@ class MoGoAutopilotControlProvider : .setClient(false)// 乘客端直连工控机改为false .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() - AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) + AdasManager.getInstance().create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) diff --git a/libraries/mogo-adas/src/main/AndroidManifest.xml b/libraries/mogo-adas/src/main/AndroidManifest.xml index d0a6ae62d1..8a4b6c866e 100644 --- a/libraries/mogo-adas/src/main/AndroidManifest.xml +++ b/libraries/mogo-adas/src/main/AndroidManifest.xml @@ -3,4 +3,5 @@ + diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index 71afc9c3c1..70bbc2c775 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -11,6 +11,7 @@ import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_SOURCE_ADAS; import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_TYPE_INIT_STATUS; import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_TYPE_SOCKET_AUTOPILOT; +import android.content.Context; import android.os.Handler; import android.os.Message; import android.os.SystemClock; @@ -138,6 +139,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec */ private SubscribeInterface subscribeInterface; private Timer carConfigReqTimer;//车辆基础信息请求 多次请求防止无法收到基础信息情况出现 + private Context context; public void setOnMultiDeviceListener(OnMultiDeviceListener onMultiDeviceListener) { this.onMultiDeviceListener = onMultiDeviceListener; @@ -169,7 +171,8 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * @param options * @param onAdasConnectStatusListener */ - AdasChannel(AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener) { + AdasChannel(Context context, AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener) { + this.context = context; this.adasConnectStatusListener = onAdasConnectStatusListener; //配置为null默认是乘客屏幕 if (options == null) { @@ -279,7 +282,8 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec nodeAliasCode = CHAIN_CODE_ADAS_INIT, paramIndexes = {-1}) private void initSocket() { - mSocket = new FpgaSocket(); + mSocket = new FpgaSocket(context); + context = null; mSocket.setWebSocketListener(this); if (isUseQueue) { WebSocketQueueManager.getInstance().registerWebSocketListener(this); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index 3bf97a5cce..b51e102f23 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -103,13 +103,13 @@ public class AdasManager implements IAdasNetCommApi { * @param options 连接参数 * @param onAdasConnectStatusListener 连接状态监听 */ - public synchronized void create(AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener) { + public synchronized void create(Context context, AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener) { if (mChannel != null) { mChannel.disconnect(); carConfig = null; mChannel = null; } - mChannel = new AdasChannel(options, onAdasConnectStatusListener); + mChannel = new AdasChannel(context, options, onAdasConnectStatusListener); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java index 1431b08472..421bafa95b 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/ReconnectManager.java @@ -1,5 +1,15 @@ package com.zhidao.support.adas.high.common; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkRequest; +import android.os.Build; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; + import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicBoolean; @@ -13,15 +23,17 @@ public class ReconnectManager { private final AtomicBoolean isReconnection = new AtomicBoolean(false);//是否正在重连 private final OnReconnectListener listener; private volatile Timer timer; + private final Context context; + private final AtomicBoolean isRegisterNetworkCallback = new AtomicBoolean(false); public interface OnReconnectListener { - void onReconnection(); + void onReconnection(String tag); } - public ReconnectManager(OnReconnectListener listener) { + public ReconnectManager(Context context, OnReconnectListener listener) { + this.context = context; this.listener = listener; - } /** @@ -36,6 +48,12 @@ public class ReconnectManager { if (!isReconnection.get()) { CupidLogUtils.i(TAG, "开始重连"); isReconnection.set(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkRequest networkRequest = new NetworkRequest.Builder().build(); + connMgr.registerNetworkCallback(networkRequest, networkCallback); + isRegisterNetworkCallback.set(true); + } if (timer == null) { timer = new Timer(); timer.schedule(new TimerTask() { @@ -43,7 +61,7 @@ public class ReconnectManager { public void run() { if (isReconnection.get()) { if (listener != null) - listener.onReconnection(); + listener.onReconnection("定时器"); } } }, 0, RECONNECT_INTERVAL);//延时 @@ -54,11 +72,26 @@ public class ReconnectManager { public synchronized void stop() { CupidLogUtils.i(TAG, "停止重连"); isReconnection.set(false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && isRegisterNetworkCallback.get()) { + ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + connMgr.unregisterNetworkCallback(networkCallback); + isRegisterNetworkCallback.set(false); + } if (timer != null) { timer.cancel(); timer = null; } } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(@NonNull Network network) { + super.onAvailable(network); + Log.i(TAG, "网络连接成功"); + if (listener != null) + listener.onReconnection("网络监听"); + } + }; } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java index 9ba4c32a95..d2c205aae1 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java @@ -6,6 +6,7 @@ import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_TYPE_INIT_STATU import static com.zhidao.support.adas.high.common.Constants.RESOURCE_PATH; import static com.zhidao.support.adas.high.common.Constants.WS_IP_HOST_HEAD; +import android.content.Context; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; @@ -79,11 +80,11 @@ public class FpgaSocket implements IWebSocket { */ private volatile String receiveTimeoutReason = null; - public FpgaSocket() { - init(); + public FpgaSocket(Context context) { + init(context); } - private void init() { + private void init(Context context) { listener = new EchoWebSocketListener(); OkHttpClient.Builder okBuilder = new OkHttpClient.Builder(); okBuilder.writeTimeout(4, TimeUnit.SECONDS) @@ -96,10 +97,10 @@ public class FpgaSocket implements IWebSocket { onPassiveClose(1001, receiveTimeoutReason); } }); - reconnectManager = new ReconnectManager(new ReconnectManager.OnReconnectListener() { + reconnectManager = new ReconnectManager(context, new ReconnectManager.OnReconnectListener() { @Override - public void onReconnection() { - connect("重连中"); + public void onReconnection(String tag) { + connect("重连中(" + tag + ")"); } }); client = okBuilder.build();