diff --git a/app/libs/SdkApiJar_V1.250217.0851.aar b/app/libs/SdkApiJar_V1.250217.0851.aar deleted file mode 100644 index 3498f8d..0000000 Binary files a/app/libs/SdkApiJar_V1.250217.0851.aar and /dev/null differ diff --git a/app/libs/SdkApiJar_V1.250415.0924.aar b/app/libs/SdkApiJar_V1.250415.0924.aar new file mode 100644 index 0000000..2f18519 Binary files /dev/null and b/app/libs/SdkApiJar_V1.250415.0924.aar differ diff --git a/app/src/main/java/qianmu/container/app/MyApplication.java b/app/src/main/java/qianmu/container/app/MyApplication.java index b97ee56..d63187f 100644 --- a/app/src/main/java/qianmu/container/app/MyApplication.java +++ b/app/src/main/java/qianmu/container/app/MyApplication.java @@ -1,11 +1,13 @@ package qianmu.container.app; +import android.app.Activity; import android.app.Application; import android.app.Service; import android.app.smdt.SmdtManagerNew; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Bundle; import android.os.PowerManager; import com.alibaba.android.arouter.BuildConfig; @@ -54,7 +56,7 @@ public class MyApplication extends Application { private SocketServer socketServer; private PowerManager powerManager = null; private PowerManager.WakeLock wakeLock = null; - + private Activity mCurrentActivity; public static long lastClick = 0;// 最后点击时间 public static long lastClickTime = 0;// 最后点击时间 public static int clickTimes = 0;// 累计点击次数 @@ -70,6 +72,8 @@ public class MyApplication extends Application { return myApplication; } + + @Override public void onCreate() { super.onCreate(); @@ -84,7 +88,36 @@ public class MyApplication extends Application { if (Constant.androidBoardType.equals("smt")) { smdt = SmdtManagerNew.getInstance(this); } - // refWatcher = LeakCanary.install(this); + registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } + + @Override + public void onActivityStarted(Activity activity) { + mCurrentActivity = activity; + } + + @Override + public void onActivityResumed(Activity activity) { + mCurrentActivity = activity; + } + + @Override + public void onActivityPaused(Activity activity) { + if (mCurrentActivity == activity) { + mCurrentActivity = null; + } + } + + @Override + public void onActivityStopped(Activity activity) {} + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + + @Override + public void onActivityDestroyed(Activity activity) { } + }); } public Lztek getLztek() { @@ -209,5 +242,10 @@ public class MyApplication extends Application { return false; } } + // 获取当前Activity + public Activity getCurrentActivity() { + return mCurrentActivity; + } + } diff --git a/app/src/main/java/qianmu/container/handler/ContainerHandler.java b/app/src/main/java/qianmu/container/handler/ContainerHandler.java index 64b3157..b5c57c3 100644 --- a/app/src/main/java/qianmu/container/handler/ContainerHandler.java +++ b/app/src/main/java/qianmu/container/handler/ContainerHandler.java @@ -115,10 +115,20 @@ public class ContainerHandler extends Handler { try { sendEmptyMessageDelayed(HEART_BEAT_DELAY_TIME, HEART_BEAT_DELAY_TIME); - if(Constant.androidBoardType.contains("xwst") && Constant.screenType.equals("HDMI")){ + if(Constant.androidBoardType.equals("xwst") && Constant.screenType.equals("HDMI")){ if(RootCmdUtil.HDMIEnabled()){ PowerData.updatePowerOnOrOffTime(); } + }else if(Constant.androidBoardType.equals("xwst2") && Constant.screenType.equals("HDMI")){ + RootCmdUtil.checkHDMIEnabled(new HdmiStatusCallback() { + @Override + public void onResult(boolean isEnabled) { + LoggerUtil.e("mqttState","HDMI结果:"+isEnabled+",mqttState结果:"+Constant.mqttState); + if(isEnabled){ + PowerData.updatePowerOnOrOffTime(); + } + } + }); }else { PowerData.updatePowerOnOrOffTime(); } @@ -284,7 +294,7 @@ public class ContainerHandler extends Handler { * */ private void mqttState(){ try { - if(Constant.androidBoardType.contains("xwst") && Constant.screenType.equals("HDMI")){ + if(Constant.androidBoardType.equals("xwst") && Constant.screenType.equals("HDMI")){ //欣威视通假关机 LoggerUtil.e("mqttState","HDMI结果:"+RootCmdUtil.HDMIEnabled()+",mqttState结果:"+Constant.mqttState); if(!RootCmdUtil.HDMIEnabled()){ @@ -305,8 +315,32 @@ public class ContainerHandler extends Handler { EventBus.getDefault().post(new MessageEvent(Constant.ACTION_MQTT_STATE));//通知mqtt状态判断 } } + }else if(Constant.androidBoardType.equals("xwst2") && Constant.screenType.equals("HDMI")){ + + RootCmdUtil.checkHDMIEnabled(new HdmiStatusCallback() { + @Override + public void onResult(boolean isEnabled) { + LoggerUtil.e("mqttState","HDMI结果:"+isEnabled+",mqttState结果:"+Constant.mqttState); + if(!isEnabled){ + //HDMI无信号 + if(Constant.mqttState.equals("on")){ + LoggerUtil.e("mqttState","HDMI无信号关闭MQTTService"); + MyApplication.getInstance().stopService(new Intent(MyApplication.getInstance(),MQTTService.class)); + } + }else { + //HDMI有信号 + boolean isService = DeviceUtil.isServiceRunning(MyApplication.getInstance(), "MQTTService"); + LoggerUtil.e("mqttState","MQTTService:"+isService); + if(Constant.mqttState.equals("off") || !isService){ + LoggerUtil.e("mqttState","HDMI有信号开启MQTTService"); + MyApplication.getInstance().startService(new Intent(MyApplication.getInstance(),MQTTService.class)); + }else { + EventBus.getDefault().post(new MessageEvent(Constant.ACTION_MQTT_STATE));//通知mqtt状态判断 + } + } + } + }); }else { - if(Constant.mqttState.equals("off")){ LoggerUtil.e("mqttState","MQTT被关闭了,开启MQTTService"); MyApplication.getInstance().startService(new Intent(MyApplication.getInstance(),MQTTService.class)); diff --git a/app/src/main/java/qianmu/container/handler/HdmiStatusCallback.java b/app/src/main/java/qianmu/container/handler/HdmiStatusCallback.java new file mode 100644 index 0000000..aa55eb9 --- /dev/null +++ b/app/src/main/java/qianmu/container/handler/HdmiStatusCallback.java @@ -0,0 +1,11 @@ +package qianmu.container.handler; + +/** + * Created by Android Studio. + * User: linzhibin + * Date: 2025/10/30 + * Time: 14:52 + */ +public interface HdmiStatusCallback { + void onResult(boolean isEnabled); +} diff --git a/app/src/main/java/qianmu/container/mqtt/MQTTService.java b/app/src/main/java/qianmu/container/mqtt/MQTTService.java index 3b305ca..1192944 100644 --- a/app/src/main/java/qianmu/container/mqtt/MQTTService.java +++ b/app/src/main/java/qianmu/container/mqtt/MQTTService.java @@ -8,12 +8,15 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.graphics.Bitmap; +import android.graphics.Rect; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Binder; import android.os.Environment; import android.os.IBinder; import android.util.Log; +import android.view.View; import androidx.core.app.NotificationCompat; @@ -42,6 +45,7 @@ import org.greenrobot.eventbus.ThreadMode; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; +import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; @@ -62,6 +66,7 @@ import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -652,47 +657,39 @@ public class MQTTService extends Service { if(!b){ return; } - Executors.newSingleThreadExecutor().execute(() -> { + ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); + singleThreadExecutor.execute(() -> { try { - uploadScreenShot(path,DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_CODE),String.valueOf(time)); - } catch (Exception e) { e.printStackTrace(); } }); + singleThreadExecutor.shutdown(); return; } - String cmd = "screencap -p " + path; - Executors.newSingleThreadExecutor().execute(() -> { - try { - Process process = Runtime.getRuntime().exec("su");//不同的设备权限不一样 - PrintWriter pw = new PrintWriter(process.getOutputStream()); - pw.println(cmd); - pw.flush(); - pw.println("exit"); - pw.flush(); - try { - process.waitFor(); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - pw.close(); - process.destroy(); - - if(!new File(path).exists()){ - LoggerUtil.e("screenShot","截屏失败"); - return; - } - uploadScreenShot(path,DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_CODE),String.valueOf(time)); - - } catch (IOException e) { - e.printStackTrace(); - } - }); - + View decorView = MyApplication.getInstance().getCurrentActivity().getWindow().getDecorView(); + decorView.setDrawingCacheEnabled(true); + decorView.buildDrawingCache(); + Bitmap bmp = decorView.getDrawingCache(); + Rect frame = new Rect(); + decorView.getWindowVisibleDisplayFrame(frame); + int statusBarHeight = frame.top; + Bitmap screenBitmap = Bitmap.createBitmap(bmp, 0, statusBarHeight, decorView.getWidth(), decorView.getHeight() - statusBarHeight); + decorView.setDrawingCacheEnabled(false); + //保存 + try (FileOutputStream fos = new FileOutputStream(file)) { + screenBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + if(!new File(path).exists()){ + LoggerUtil.e("screenShot","截屏失败"); + return; + } + uploadScreenShot(path,DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_CODE),String.valueOf(time)); } //上传截屏 diff --git a/app/src/main/java/qianmu/container/util/RootCmdUtil.java b/app/src/main/java/qianmu/container/util/RootCmdUtil.java index 196473b..7f747ee 100644 --- a/app/src/main/java/qianmu/container/util/RootCmdUtil.java +++ b/app/src/main/java/qianmu/container/util/RootCmdUtil.java @@ -2,11 +2,16 @@ package qianmu.container.util; import android.util.Log; +import com.sdkapi.api.SdkApi; +import com.sdkapi.common.ApiTool; +import com.sdkapi.common.ResultCallback; +import com.sdkapi.common.ResultInfo; + import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; -import java.util.Scanner; +import qianmu.container.handler.HdmiStatusCallback; /** @@ -28,6 +33,17 @@ public final class RootCmdUtil { else return true; } + public static void checkHDMIEnabled(HdmiStatusCallback callback) { + SdkApi.getInstance().Display().getScreenOnoff(ApiTool.Screen.ALL, + new ResultCallback>() { + @Override + public void onMsg(ResultInfo result) { + // 回调结果给外部 + callback.onResult(result.getVal()); + } + }); + } + /** * 执行命令并且输出结果 @@ -67,4 +83,5 @@ public final class RootCmdUtil { } return result; } -} \ No newline at end of file +} + diff --git a/app/src/main/java/qianmu/container/util/SignWayUtil.java b/app/src/main/java/qianmu/container/util/SignWayUtil.java index 8347326..28a6e91 100644 --- a/app/src/main/java/qianmu/container/util/SignWayUtil.java +++ b/app/src/main/java/qianmu/container/util/SignWayUtil.java @@ -117,7 +117,7 @@ public class SignWayUtil { } } ); - }else if(Constant.androidBoardType.equals("ys")){ + }else if(Constant.androidBoardType.equals("ys")){ MyManager manager = MyManager.getInstance(MyApplication.getInstance()); boolean success = manager.silentInstallApk(path,true); LoggerUtil.e("SignwayUtil", "app安装结果:"+success); @@ -362,6 +362,7 @@ public class SignWayUtil { }if(Constant.androidBoardType.equals("xwst2")){ //true:显示 false:隐藏 SdkApi.getInstance().SystemCtrl().setStatusBarDisplay(type); + SdkApi.getInstance().SystemCtrl().setNavigationBar(type); } else if(Constant.androidBoardType.equals("ys")){ //true:隐藏 false:显示 MyManager manager = MyManager.getInstance(MyApplication.getInstance());