[600][adas]添加添加网络监听,检测到网络连接成功后立即连接

This commit is contained in:
xinfengkun
2023-09-06 19:45:31 +08:00
parent 551ff2a745
commit c2a95e78ab
6 changed files with 58 additions and 19 deletions

View File

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

View File

@@ -3,4 +3,5 @@
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

View File

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

View File

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

View File

@@ -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("网络监听");
}
};
}

View File

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