From 0cbc4263068d7a1e998d37f7e0ad0930782ae50b Mon Sep 17 00:00:00 2001 From: gaozl Date: Thu, 2 Apr 2026 14:15:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20AI=E8=A7=86=E9=A2=91=E5=B0=81=E7=89=88?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E9=9D=A2=E4=B8=8D=E5=8C=85=E5=90=AB=E8=A7=86?= =?UTF-8?q?=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../container/activity/BaseActivity.java | 6 +++ .../activity/H5/UpdateFileActivity.java | 8 ++++ .../activity/H5/WebViewActivity.java | 8 +++- .../java/qianmu/container/app/Constant.java | 1 + .../java/qianmu/container/data/PowerData.java | 35 +++++++++++++++--- .../qianmu/container/mqtt/MQTTService.java | 27 +++++++++++--- .../qianmu/container/util/DeviceUtil.java | 5 +-- .../qianmu/container/util/SignWayUtil.java | 37 +++++++++++++++++++ 9 files changed, 113 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b56a952..04e1837 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -107,7 +107,7 @@ dependencies { implementation files('libs/signway.jar') //欣威视通 implementation files('libs/sdkapi.jar') //Bv-3588 implementation files('libs/smdt.jar') //视美泰 - implementation files('libs/DUI-lite-SDK-for-Android-3.5.0-466a4c77.jar') //思必驰 + implementation files('libs/DUI-lite-SDK-for-Android-3.5.0-466a4c77.jar') //思必驰 testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/app/src/main/java/qianmu/container/activity/BaseActivity.java b/app/src/main/java/qianmu/container/activity/BaseActivity.java index 3078e18..3689d24 100644 --- a/app/src/main/java/qianmu/container/activity/BaseActivity.java +++ b/app/src/main/java/qianmu/container/activity/BaseActivity.java @@ -274,6 +274,12 @@ public abstract class BaseActivity extends AppCompatActivity { if(Constant.androidBoardType.equals("smt")){ MyApplication.getInstance().getSmdt().sys_setDaemonsActivity(this.getPackageName(),3600000,true); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.q-zheng.action.APPMONITOR"); + intent.putExtra("package_name", Constant.APP_SEND_PACKAGE_NAME); + intent.putExtra("self_starting", true); + intent.putExtra("period", 600); + MyApplication.getInstance().sendBroadcast(intent); } try { diff --git a/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java b/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java index b6f10bc..08ea402 100644 --- a/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java @@ -3,6 +3,7 @@ package qianmu.container.activity.H5; import android.Manifest; import android.app.smdt.SmdtManagerNew; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; @@ -274,7 +275,14 @@ public class UpdateFileActivity extends BaseActivity { if(Constant.androidBoardType.equals("smt")){ MyApplication.getInstance().getSmdt().sys_setSystemBootApp(MyApplication.getInstance().getPackageName()); MyApplication.getInstance().getSmdt().sys_setDaemonsActivity(MyApplication.getInstance().getPackageName(),2000,true); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.q-zheng.action.APPMONITOR"); + intent.putExtra("package_name", Constant.APP_SEND_PACKAGE_NAME); + intent.putExtra("self_starting", true); + intent.putExtra("period", 12); + MyApplication.getInstance().sendBroadcast(intent); } + } @Override 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 6a3e325..d883c75 100644 --- a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java @@ -112,7 +112,7 @@ public class WebViewActivity extends BaseActivity { static final int TYPE_START_SERVER = 4;//重新启动web服务 static final int TYPE_SHENG_HTML_MAG = 5;//返回接口请求值给h5 static String HtmlUrl = "http://127.0.0.1:8080/index.html";//webServer服务地址 - //static String HtmlUrl = "http://192.168.0.100:5173/"; + //static String HtmlUrl = "http://192.168.0.105:5173/"; int time = 0; String interfaceRequestData=""; private VideoView currentVideo; //当前 @@ -817,6 +817,12 @@ public class WebViewActivity extends BaseActivity { break; case Constant.VOID_STOP: changeVideo("bg"); + runOnUiThread(new Runnable() { + @Override + public void run() { + binding.web.evaluateJavascript("javascript: window.setState();", null); + } + }); break; case Constant.ACTION_UPDATE_PROG2://后台下发节目通知,重置导视倒计时。 LoggerUtil.e(TAG,"重启导视倒计时"); diff --git a/app/src/main/java/qianmu/container/app/Constant.java b/app/src/main/java/qianmu/container/app/Constant.java index 8336581..c00195a 100644 --- a/app/src/main/java/qianmu/container/app/Constant.java +++ b/app/src/main/java/qianmu/container/app/Constant.java @@ -32,6 +32,7 @@ public class Constant { // public static String androidBoardType = "huidu"; //设备板子型号 huidu(灰度主板) 罗湖寻车机 // public static String androidBoardType = "bv"; //设备板子型号 Bv-3588M // public static String androidBoardType = "smt"; //设备板子型号 视美泰 + // public static String androidBoardType = "ctf"; //创泰丰 public static final String VOID_STOP = "void_stop";// public static String whoActivity = ""; // 哪个activity页面 diff --git a/app/src/main/java/qianmu/container/data/PowerData.java b/app/src/main/java/qianmu/container/data/PowerData.java index 1f8f204..430cae0 100644 --- a/app/src/main/java/qianmu/container/data/PowerData.java +++ b/app/src/main/java/qianmu/container/data/PowerData.java @@ -1,6 +1,8 @@ package qianmu.container.data; import android.app.smdt.SmdtManagerNew; +import android.content.Context; +import android.content.Intent; import android.util.Log; import com.google.gson.Gson; @@ -328,31 +330,52 @@ public class PowerData extends BaseData { } } + }else if(Constant.androidBoardType.equals("ctf")){ + LoggerUtil.e("PowerData()", "关机时间:"+s + " " + parameter+",开机时间:"+s + " " + bootTime); + Intent intent = new Intent("android.intent.action.setpoweronoff"); + if(parameterLong > bootLong) { + //关机时间大于开机时间,第二天开机 + int[] timeoffArray = {Integer.parseInt(date[0]), Integer.parseInt(date[1]), Integer.parseInt(date[2]), Integer.parseInt(off[0]), Integer.parseInt(off[1])}; + int[] timeonArray = {Integer.parseInt(date2[0]), Integer.parseInt(date2[1]), Integer.parseInt(date2[2]), Integer.parseInt(on2[0]),Integer.parseInt(on2[1])}; + intent.putExtra("timeon", timeonArray); + intent.putExtra("timeoff", timeoffArray); + }else { + //关机时间小于开机时间,当天关机,当天开机。 + if(currentLong < parameterLong){ + //当前时间在关机时间之前 + int[] timeoffArray = {Integer.parseInt(date[0]), Integer.parseInt(date[1]), Integer.parseInt(date[2]), Integer.parseInt(off[0]), Integer.parseInt(off[1])}; + int[] timeonArray = {Integer.parseInt(date[0]), Integer.parseInt(date[1]), Integer.parseInt(date[2]), Integer.parseInt(on[0]),Integer.parseInt(on[1])}; + intent.putExtra("timeon", timeonArray); + intent.putExtra("timeoff", timeoffArray); + }else{ + //当前时间在关机后,设置第二天开关机 + int[] timeoffArray = {Integer.parseInt(date2[0]), Integer.parseInt(date2[1]), Integer.parseInt(date2[2]), Integer.parseInt(off[0]), Integer.parseInt(off[1])}; + int[] timeonArray = {Integer.parseInt(date2[0]), Integer.parseInt(date2[1]), Integer.parseInt(date2[2]), Integer.parseInt(on[0]),Integer.parseInt(on[1])}; + intent.putExtra("timeon", timeonArray); + intent.putExtra("timeoff", timeoffArray); + } + } + intent.putExtra("enable", true); + MyApplication.getInstance().sendBroadcast(intent); }else if(Constant.androidBoardType.equals("huidu")){ - //并且设定的开机与关机时间必须超过当前时间,否则,会清除掉已设定的开机时间或关机时间,导致不能达到预想的要求。 if(parameterLong > bootLong) { //关机时间大于开机时间,第二天开机 int second =(int)(bootLong2-currentLong)/1000; SignWayUtil.setPowerOnOffTimeforHuidu(second); - }else { //关机时间小于开机时间,当天关机,当天开机。 if(currentLong < parameterLong){ //当前时间在关机时间之前 int second =(int)(bootLong-currentLong)/1000; SignWayUtil.setPowerOnOffTimeforHuidu(second); - }else{ //当前时间在关机后,设置第二天开关机 int second =(int)(bootLong2-currentLong)/1000; SignWayUtil.setPowerOnOffTimeforHuidu(second); - } } - } - String deviceType = DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_TYPE);//设备类型,导视,信发等 if(deviceType.equals("指路机")){ DeviceData.jxbAutoBoot(bootTime2,parameter,null,null); diff --git a/app/src/main/java/qianmu/container/mqtt/MQTTService.java b/app/src/main/java/qianmu/container/mqtt/MQTTService.java index 24571d1..3f613bf 100644 --- a/app/src/main/java/qianmu/container/mqtt/MQTTService.java +++ b/app/src/main/java/qianmu/container/mqtt/MQTTService.java @@ -165,7 +165,6 @@ public class MQTTService extends Service { clientId= DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_CODE); EventBus.getDefault().register(this); init(); - } public static void publish(String msg){ @@ -686,11 +685,29 @@ public class MQTTService extends Service { }else if(!"".equals(Constant.androidBoardType)){ screenshotFuture = singleThreadExecutor.submit(() -> { SignWayUtil.takeScreenshot(path); - if(new File(path).exists()){ - LoggerUtil.e("screenShot","截屏完成"); - return true; + int retryCount = 0; + boolean isSuccess = false; + long lastSize = 0; + while (retryCount < 20) { // 最多5秒超时 + if (file.exists()) { + long currentSize = file.length(); + // 关键:文件大小 2 次都不变 → 真正写完 + if (currentSize > 0 && currentSize == lastSize) { + LoggerUtil.e("screenShot","截屏完成"); + isSuccess = true; + break; + } + lastSize = currentSize; + } + try { + Thread.sleep(300); + } catch (InterruptedException e) { + e.printStackTrace(); + break; + } + retryCount++; } - return false; + return isSuccess; }); }else if(RootCmdUtil.checkSuCommand()){ //root LoggerUtil.e("screenShot","root截屏"); diff --git a/app/src/main/java/qianmu/container/util/DeviceUtil.java b/app/src/main/java/qianmu/container/util/DeviceUtil.java index 501edf3..3853602 100644 --- a/app/src/main/java/qianmu/container/util/DeviceUtil.java +++ b/app/src/main/java/qianmu/container/util/DeviceUtil.java @@ -122,7 +122,7 @@ public class DeviceUtil { if("".equals(ip)){ try { //获取wifi服务 - WifiManager wifiManager = (WifiManager) MyApplication.getInstance().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + WifiManager wifiManager = (WifiManager) MyApplication.getInstance().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo == null || wifiInfo.getIpAddress() == 0) { return ""; @@ -158,8 +158,7 @@ public class DeviceUtil { //获取有线网络mac public static String getLanMac(){ - - ConnectivityManager cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext().getSystemService(Service.CONNECTIVITY_SERVICE); + ConnectivityManager cm = (ConnectivityManager) MyApplication.getInstance().getSystemService(Service.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo(); String extraInfo = activeNetworkInfo.getExtraInfo(); LoggerUtil.e("mac获取","mac:"+extraInfo); diff --git a/app/src/main/java/qianmu/container/util/SignWayUtil.java b/app/src/main/java/qianmu/container/util/SignWayUtil.java index 88e0702..19ac7ac 100644 --- a/app/src/main/java/qianmu/container/util/SignWayUtil.java +++ b/app/src/main/java/qianmu/container/util/SignWayUtil.java @@ -1,12 +1,17 @@ package qianmu.container.util; import android.app.smdt.SmdtManagerNew; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.net.Uri; import android.os.Build; import android.os.RemoteException; import android.os.signwaymanager.SignwayManager; import android.util.Log; +import android.os.Build.VERSION; +import androidx.core.content.FileProvider; import com.sdkapi.api.SdkApi; import com.sdkapi.common.ResultCallback; @@ -60,6 +65,9 @@ public class SignWayUtil { }else if(Constant.androidBoardType.equals("huidu")){ HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.shutdown(); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.intent.action.shutdown"); + MyApplication.getInstance().sendBroadcast(intent); } } catch (Throwable t) { LoggerUtil.e("shutDown", StringUtil.getThrowableStr(t)); @@ -97,6 +105,9 @@ public class SignWayUtil { }else if(Constant.androidBoardType.equals("huidu")){ HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.reboot(); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.intent.action.reboot"); + MyApplication.getInstance().sendBroadcast(intent); } } catch (Throwable t) { LoggerUtil.e("reboot", StringUtil.getThrowableStr(t)); @@ -150,6 +161,12 @@ public class SignWayUtil { HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.install(path); //helper.installAndStart(path,"qianmu.container","qianmu.container.activity.H5.UpdateFileActivity"); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.intent.action.apkinstall"); + intent.putExtra("path", path); + intent.putExtra("commit_start", true); + intent.putExtra("auto_start", true); + MyApplication.getInstance().sendBroadcast(intent); } } catch (Throwable t) { LoggerUtil.e("silentInstallApk", StringUtil.getThrowableStr(t)); @@ -305,6 +322,10 @@ public class SignWayUtil { }catch(Exception exp){ LoggerUtil.e("screenShot",exp.getMessage()); } + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.intent.action.screenshoot"); + intent.putExtra("path", path); + MyApplication.getInstance().sendBroadcast(intent); } } catch (Throwable t) { LoggerUtil.e("takeScreenshot", StringUtil.getThrowableStr(t)); @@ -368,6 +389,14 @@ public class SignWayUtil { HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.showNavigationBar(type); helper.showStatusBar(type); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent; + if (!type) { + intent = new Intent("rk.android.remove_navigationbar"); + } else { + intent = new Intent("rk.android.add_navigationbar"); + } + MyApplication.getInstance().sendBroadcast(intent); } } catch (Throwable t) { @@ -496,6 +525,8 @@ public class SignWayUtil { return "视美泰-"+Build.MODEL+",Android"+getAndroidVersion(); }else if(Constant.androidBoardType.equals("huidu")){ return "灰度"+Build.MODEL+",Android"+getAndroidVersion(); + }else if(Constant.androidBoardType.equals("ctf")){ + return "创泰丰"+Build.MODEL+",Android"+getAndroidVersion(); }else { return Build.MODEL+",Android"+getAndroidVersion(); } @@ -578,6 +609,12 @@ public class SignWayUtil { }else if(Constant.androidBoardType.equals("huidu")){ HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.setSystemTime(date.getTime()); + }else if(Constant.androidBoardType.equals("ctf")){ + Intent intent = new Intent("android.intent.action.settime"); + int[] timeArray = {Integer.parseInt(timesplit[0]),Integer.parseInt(timesplit[1]),Integer.parseInt(timesplit[2]),Integer.parseInt(timesplit[3]),Integer.parseInt(timesplit[4]),Integer.parseInt(timesplit[5])}; + intent.putExtra("settime",timeArray); + intent.putExtra("enable" ,true); + MyApplication.getInstance().sendBroadcast(intent); } }catch (Exception e){ LoggerUtil.e("setDeviceTime:","无法设置系统时间"+e.getMessage());