diff --git a/app/build.gradle b/app/build.gradle index 5a57765..df5898d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "qianmu.container" - minSdkVersion 22 + minSdkVersion 26 targetSdkVersion 30 versionCode 6 versionName "V2.0.7.54" diff --git a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java index 2c4b033..04a1866 100644 --- a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java @@ -108,8 +108,8 @@ public class WebViewActivity extends BaseActivity { static final int TYPE_GO_SAVESCREEN = 300;//导视通知跳转屏保 static final int TYPE_HINT_PASSWORD = 3;//隐藏密码输入框 static final int TYPE_START_SERVER = 4;//重新启动web服务 - static String HtmlUrl = "http://127.0.0.1:8080/index.html";//webServer服务地址 http://192.168.1.218:5173/ - // static String HtmlUrl = "http://192.168.1.196:5500/index.html"; + //static String HtmlUrl = "http://127.0.0.1:8080/index.html";//webServer服务地址 http://192.168.1.218:5173/ + static String HtmlUrl = "http://192.168.1.196:5500/index.html"; int time = 0; private VideoView currentVideo; private VideoView proVideo; // 当前正在切换的目标视频 @@ -945,15 +945,15 @@ public class WebViewActivity extends BaseActivity { public void connectLocalSocket() { try { //客户端不存在时 创建客户端设置监听事件 - if (localSocketClient == null) initLocalSocketClient(); - boolean open = localSocketClient.isOpen(); - LoggerUtil.e("connectLocalSocket", "socket客户端连接状态:open="+open); - if (open){ + if (localSocketClient != null && + localSocketClient.getReadyState() == ReadyState.OPEN) { + LoggerUtil.e("connectLocalSocket", "socket客户端连接状态:open"); countConect = 0; - return; + return; // 连接正常,直接返回 } - countConect++; + if (localSocketClient == null) initLocalSocketClient(); localSocketClient.connect(); + countConect++; if(countConect>=100){ LoggerUtil.e("Socket: ", "socket未连接,设备重启"); } @@ -974,7 +974,6 @@ public class WebViewActivity extends BaseActivity { localSocketClient.send(StringUtil.strSplice("{\"method\":\"/asr/stop\"}")); } }); - localSocketClient.setOnMessageListener((conn, message) -> { try { TTSMessage messageBean = new Gson().fromJson(message, TTSMessage.class); @@ -1044,7 +1043,9 @@ public class WebViewActivity extends BaseActivity { private void scheduleReconnect() { destroyLocalSocketClient(); mainHandler.removeCallbacks(delayedTask); - mainHandler.postDelayed(delayedTask, 6000); // 3秒后重连 + mainHandler.postDelayed(() -> { + new Thread(() -> connectLocalSocket()).start(); + }, 6000); // 3秒后重连 } private Runnable delayedTask = new Runnable() { @Override @@ -1055,7 +1056,18 @@ public class WebViewActivity extends BaseActivity { //销毁当前的客户端 public void destroyLocalSocketClient() { if (localSocketClient == null) return; - localSocketClient.close(); - localSocketClient = null; + try { + if (localSocketClient != null) { + // 避免在已关闭或未打开的状态下再次关闭 + if (localSocketClient.isOpen()) { + localSocketClient.close(); // 主动发送关闭帧 + } + localSocketClient = null; + } + } catch (Throwable t) { + // 这里必须捕获所有异常,防止它传播出去导致进程崩溃 + LoggerUtil.e("destroyLocalSocketClient", "清理时发生异常"); + } + } } diff --git a/app/src/main/java/qianmu/container/app/Constant.java b/app/src/main/java/qianmu/container/app/Constant.java index 8fece7e..7e3e796 100644 --- a/app/src/main/java/qianmu/container/app/Constant.java +++ b/app/src/main/java/qianmu/container/app/Constant.java @@ -29,9 +29,9 @@ public class Constant { // public static String androidBoardType = "zc"; //设备板子型号 zc(卓策主板——王府井喜悦、杨浦中心医院) // public static String androidBoardType = "sx"; //设备板子型号 sx(视想) // public static String androidBoardType = "nova"; //设备板子型号 诺瓦盒子 华贸LED - // public static String androidBoardType = "huidu"; //设备板子型号 huidu(灰度主板) 罗湖寻车机 + public static String androidBoardType = "huidu"; //设备板子型号 huidu(灰度主板) 罗湖寻车机 // public static String androidBoardType = "bv"; //设备板子型号 Bv-3588M - public static String androidBoardType = "smt"; //设备板子型号 视美泰 + // public static String androidBoardType = "smt"; //设备板子型号 视美泰 public static String TTSFac = "sbc"; // 语音识别厂家 kdxf--科大讯飞 sbc-思必驰 public static final String VOID_STOP = "void_stop";// diff --git a/app/src/main/java/qianmu/container/mqtt/MQTTService.java b/app/src/main/java/qianmu/container/mqtt/MQTTService.java index 1bc28b7..52081cc 100644 --- a/app/src/main/java/qianmu/container/mqtt/MQTTService.java +++ b/app/src/main/java/qianmu/container/mqtt/MQTTService.java @@ -63,6 +63,7 @@ import java.util.Map; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import javax.net.ssl.SSLContext; @@ -674,7 +675,7 @@ public class MQTTService extends Service { pw.println("exit"); pw.flush(); try { - process.waitFor(); + process.waitFor(2500, TimeUnit.MILLISECONDS);; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();