diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 43ed7fb..4574fd8 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9599012..c7cb55f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { minSdkVersion 24 targetSdkVersion 30 versionCode 6 - versionName "V2.0.8.24" + versionName "V2.0.8.26" // 2.0.8.2 修改网络连接证书设置、定时开关机设置 // 2.0.8.3 获取mac修改 // V2.0.8.5 同屏优化 @@ -109,7 +109,8 @@ 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') //思必驰 + implementation files('libs\\extmanager.jar') //TCL 982 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/libs/extmanager.jar b/app/libs/extmanager.jar new file mode 100644 index 0000000..b75ec3a Binary files /dev/null and b/app/libs/extmanager.jar differ 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 08ea402..9fcb7f1 100644 --- a/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/UpdateFileActivity.java @@ -30,6 +30,8 @@ import com.google.gson.JsonParser; import com.iflytek.sparkchain.core.SparkChain; import com.iflytek.sparkchain.core.SparkChainConfig; import com.sdkapi.api.SdkApi; +import com.tclsy.extmanager.authority.AuthorityManager; +import com.tclsy.extmanager.power.TPowerManager; import java.io.File; import java.text.SimpleDateFormat; @@ -264,7 +266,13 @@ public class UpdateFileActivity extends BaseActivity { //灰度主板静默安装apk需要提前连接 initHuidu(); } - + if(Constant.androidBoardType.equals("tcl")){ + try{ + TPowerManager.getInstance().setAlarmStatus(true); + }catch (Exception e){ + LoggerUtil.e("TCL:", e.getMessage()); + } + } if(Constant.androidBoardType.equals("xwst2")){ //新版欣威视通初始化 SdkApi.newInstance(this); 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 7f32ae5..6ff851a 100644 --- a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java @@ -709,7 +709,6 @@ public class WebViewActivity extends BaseActivity { } public void onResults(AIResult results) { - LoggerUtil.e("ASRInit: ", String.valueOf(results.isLast())); if (results.getResultType() == AIConstant.AIENGINE_MESSAGE_TYPE_JSON) { JSONResultParser parser = new JSONResultParser((String) results.getResultObject()); if("".equals(parser.getVar()) && !"".equals(parser.getText())){ diff --git a/app/src/main/java/qianmu/container/activity/program/ScreenSaverActivity.java b/app/src/main/java/qianmu/container/activity/program/ScreenSaverActivity.java index 5d1bc40..77e7cbc 100644 --- a/app/src/main/java/qianmu/container/activity/program/ScreenSaverActivity.java +++ b/app/src/main/java/qianmu/container/activity/program/ScreenSaverActivity.java @@ -335,13 +335,13 @@ public class ScreenSaverActivity extends BaseActivity { } else if (Constant.NOVA_REBOOT.equals(message.getCode())) { LoggerUtil.e("ScreenSaverActivity", "诺瓦设备重启"); - reboot(); + login("reboot"); } else if (Constant.NOVA_UPDATE_APP.equals(message.getCode())) { LoggerUtil.e("ScreenSaverActivity", "诺瓦设备更新app"); updateApp(message.getData()); } else if (Constant.NOVA_SCREEN_SHOT.equals(message.getCode())) { LoggerUtil.e("ScreenSaverActivity", "诺瓦设备截屏"); - Screenshot(message.getData()); + login("screenShot"); } else if (Constant.NOVA_SCREEN_POWER_ON.equals(message.getCode())) { //LoggerUtil.e("ScreenSaverActivity", "诺瓦设备开屏"); //screenPower("OPEN"); @@ -458,21 +458,25 @@ public class ScreenSaverActivity extends BaseActivity { LoggerUtil.e("QHT: ","登录"); instance.nvLoginAsync("{\"sn\":\"" + sn + "\",\"username\":\"admin\",\"rememberPwd\":1,\"password\":\"" + TB40_password + "\",\"loginType\":0}", new ViplexCore.CallBack() { - @Override - public void dataCallBack(int code, String data) { - LoggerUtil.e("QHT: 登录1: ", "code: " + code + "data: " + data); - } - }); - instance.nvLoginAsync("{\"sn\":\"" + sn + "\",\"username\":\"admin\",\"rememberPwd\":1,\"password\":\"" - + TB40_password + "\",\"loginType\":1}", new ViplexCore.CallBack() { + @Override + public void dataCallBack(int code, String data) { + LoggerUtil.e("QHT: 登录1: ", "code: " + code + "data: " + data); + instance.nvLoginAsync("{\"sn\":\"" + sn + "\",\"username\":\"admin\",\"rememberPwd\":1,\"password\":\"" + + TB40_password + "\",\"loginType\":1}", new ViplexCore.CallBack() { @Override public void dataCallBack(int code, String data) { LoggerUtil.e("QHT: 登录2: ", "code: " + code + "data: " + data); - if("reboot".equals(cmd)){ - reboot(); + if(code == 0 || code == 65353){ + if("reboot".equals(cmd)){ + reboot(); + }else if("screenShot".equals(cmd)){ + Screenshot(); + } } } }); + } + }); } // TB40 重启 @@ -484,7 +488,12 @@ public class ScreenSaverActivity extends BaseActivity { public void dataCallBack(int code, String data) { LoggerUtil.e("QHT: 重启:", "code:" + code + ",data:" + data); if(code == 65350){ - login("reboot"); + new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + login("reboot"); + } + }, 60 * 1000); } } }); @@ -544,7 +553,8 @@ public class ScreenSaverActivity extends BaseActivity { }); } - public void Screenshot(String time) { + public void Screenshot() { + String time = String.valueOf(System.currentTimeMillis()); String data3 = "{\"sn\":\"" + sn + "\",\"width\":1920,\"height\":1080,\"downLoadDirectoryPath\":\"/storage/emulated/0/\",\"pictureName\":\"screenShot.png\",\"pictureType\":1}"; instance.nvDownLoadScreenshotAsync(data3, new ViplexCore.CallBack() { @@ -554,13 +564,10 @@ public class ScreenSaverActivity extends BaseActivity { if (code == 0) { uploadScreenShot("/storage/emulated/0/screenShot.png", DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_CODE), time); - }else if(code == 65350){ - login(""); } } }); } - // 上传截屏 public static void uploadScreenShot(String filePath, String code, String timestamp) { diff --git a/app/src/main/java/qianmu/container/app/Constant.java b/app/src/main/java/qianmu/container/app/Constant.java index ca91b73..e78e00f 100644 --- a/app/src/main/java/qianmu/container/app/Constant.java +++ b/app/src/main/java/qianmu/container/app/Constant.java @@ -33,6 +33,7 @@ public class Constant { // public static String androidBoardType = "bv"; //设备板子型号 Bv-3588M // public static String androidBoardType = "smt"; //设备板子型号 视美泰 // public static String androidBoardType = "ctf"; //创泰丰 + // public static String androidBoardType = "tcl"; //TCL 982 public static final String VOID_STOP = "void_stop";// public static final String VOID_ERROR = "void_error"; diff --git a/app/src/main/java/qianmu/container/app/MyApplication.java b/app/src/main/java/qianmu/container/app/MyApplication.java index 8bd6055..ad1b333 100644 --- a/app/src/main/java/qianmu/container/app/MyApplication.java +++ b/app/src/main/java/qianmu/container/app/MyApplication.java @@ -9,6 +9,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.PowerManager; +import android.util.Log; import com.aispeech.export.config.AuthConfig; import com.alibaba.android.arouter.BuildConfig; @@ -20,6 +21,8 @@ import com.lztek.toolkit.Lztek; import com.lzy.okgo.OkGo; import com.aispeech.DUILiteConfig; import com.aispeech.DUILiteSDK; +import com.tclsy.extmanager.authority.AuthorityManager; + import java.io.PrintWriter; import java.io.StringWriter; import java.security.KeyStore; @@ -88,6 +91,15 @@ public class MyApplication extends Application { public void onCreate() { super.onCreate(); myApplication = this; + if(Constant.androidBoardType.equals("tcl")){ + boolean result = AuthorityManager.getInstance().verify("2d9e9b15c070d0b57f5281e13c03f1ac960ce86ab8835bb8a747042aef8ef53c"); + if (result) { + Log.e("TAG", "Auth SDK success, can call other interface "); + } else { + Log.e("TAG", "Auth SDK failed, please check the auth key is correct"); + } + } + try { Thread.sleep(6000); } catch (InterruptedException e) { diff --git a/app/src/main/java/qianmu/container/data/PowerData.java b/app/src/main/java/qianmu/container/data/PowerData.java index 430cae0..2d8742a 100644 --- a/app/src/main/java/qianmu/container/data/PowerData.java +++ b/app/src/main/java/qianmu/container/data/PowerData.java @@ -182,24 +182,14 @@ public class PowerData extends BaseData { LoggerUtil.e("设置开关机时间:", dataJson); newTimeInfo=dataJson; - //天津K11亿晟3288重启2次设备避免黑屏 + //亿晟重启2次设备避免黑屏 Calendar cal= Calendar.getInstance(); String format = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); - - if(!DeviceData.getDeviceInfo(DeviceData.DEVICE_RESTART_TIME).equals(format)){ - DeviceData.pingNet(null, null, new QuerySuccessListener() { - @Override - public void onSuccess() { - LoggerUtil.e("pingNet()", "开机检测网络正常"); - } - },new QueryErrorListener() { - @Override - public void onError() { - LoggerUtil.e("pingNet()", "开机检测网络异常,重启设备"); - DeviceData.saveDeviceInfo((DeviceData.DEVICE_RESTART_TIME),format); - SignWayUtil.reboot(); - } - } ); + if(!DeviceData.getDeviceInfo(DeviceData.DEVICE_RESTART_TIME).equals(format) && !StringUtil.isEmpty(parameter) && Constant.androidBoardType.equals("ys")){ + LoggerUtil.e("亿晟防止定时开机黑屏:", "当天开机,重启设备"); + DeviceData.saveDeviceInfo((DeviceData.DEVICE_RESTART_TIME),format); + SignWayUtil.reboot(); + return; } if (StringUtil.isEmpty(parameter)) { diff --git a/app/src/main/java/qianmu/container/mqtt/MQTTService.java b/app/src/main/java/qianmu/container/mqtt/MQTTService.java index bc91800..16ee1ed 100644 --- a/app/src/main/java/qianmu/container/mqtt/MQTTService.java +++ b/app/src/main/java/qianmu/container/mqtt/MQTTService.java @@ -472,7 +472,7 @@ public class MQTTService extends Service { if(closeMqttBean.getType().equals("firmware-update")){ //固件升级 - systemUpdate(closeMqttBean); + //systemUpdate(closeMqttBean); }else if(closeMqttBean.getType().equals("app-update")){ //APP下发 appUpdate(closeMqttBean); diff --git a/app/src/main/java/qianmu/container/receiver/SystemEventReceiver.java b/app/src/main/java/qianmu/container/receiver/SystemEventReceiver.java index 1a37562..d41b2f9 100644 --- a/app/src/main/java/qianmu/container/receiver/SystemEventReceiver.java +++ b/app/src/main/java/qianmu/container/receiver/SystemEventReceiver.java @@ -1,5 +1,7 @@ package qianmu.container.receiver; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -22,27 +24,42 @@ public class SystemEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - - switch (intent.getAction()) { - case Intent.ACTION_BOOT_COMPLETED://系统启动 - intent.setClass(context, UpdateFileActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - break; - - case Intent.ACTION_MEDIA_MOUNTED://挂载外部存储 - Uri uri = intent.getData(); - if (uri == null) { - LoggerUtil.e("MEDIA", "获取U盘挂载路径失败"); - return; - } -// EventBus.getDefault().post(new MessageEvent(Intent.ACTION_MEDIA_MOUNTED, uri.getPath())); - break; - - case Intent.ACTION_MEDIA_UNMOUNTED://卸载外部存储 - EventBus.getDefault().post(new MessageEvent(Intent.ACTION_MEDIA_UNMOUNTED)); - break; + if (intent == null || intent.getAction() == null) { + return; } + try { + String action = intent.getAction(); + + switch (action) { + case Intent.ACTION_BOOT_COMPLETED: + Intent launchIntent = new Intent(context, UpdateFileActivity.class); + launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity( + context, + 1001, + launchIntent, + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE + ); + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + if (alarmManager != null) { + alarmManager.set(AlarmManager.RTC,System.currentTimeMillis() + 1500, pendingIntent ); + } + break; + case Intent.ACTION_MEDIA_MOUNTED: + Uri uri = intent.getData(); + if (uri == null) { + LoggerUtil.e("MEDIA", "获取U盘挂载路径失败"); + return; + } + break; + case Intent.ACTION_MEDIA_UNMOUNTED: + break; + } + + } catch (Throwable e) { + e.printStackTrace(); + } } } diff --git a/app/src/main/java/qianmu/container/service/ContainerService.java b/app/src/main/java/qianmu/container/service/ContainerService.java index 0417d07..6d39284 100644 --- a/app/src/main/java/qianmu/container/service/ContainerService.java +++ b/app/src/main/java/qianmu/container/service/ContainerService.java @@ -155,7 +155,7 @@ public class ContainerService extends Service { try { ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List appProcesses = am.getRunningAppProcesses(); - if (appProcesses == null) return false; + if (appProcesses == null || appProcesses.isEmpty()) return false; for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { if (!appProcess.processName.equals(DeviceUtil.getPackageName())) continue; if (appProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) @@ -173,32 +173,56 @@ public class ContainerService extends Service { * 检测应用状态 如果在后台 唤醒到前台 */ public void detectionAppState() { - final ActivityManager manager = (ActivityManager) MyApplication.getInstance().getSystemService(Context.ACTIVITY_SERVICE); - // 获得手机进程列表 - List infoList = manager.getRunningAppProcesses(); - String packageName = DeviceUtil.getPackageName(); - for (ActivityManager.RunningAppProcessInfo info : infoList) { - if (packageName.equals(info.processName) - || "com.android.packageinstaller".equals(info.processName) - || "com.google.android.packageinstaller".equals(info.processName) - || "com.frogshealth.qianmu".equals(info.processName) - || "com.tencent.wmpf".equals(info.processName)) { - if (info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { - return; + try { + ActivityManager manager =(ActivityManager) MyApplication.getInstance().getSystemService(Context.ACTIVITY_SERVICE); + if (manager == null) { + LoggerUtil.e("detectionAppState","ActivityManager is null"); + return; + } + // 获取运行中的进程 + List infoList; + try { + infoList = manager.getRunningAppProcesses(); + } catch (Exception e) { + LoggerUtil.e("detectionAppState", "getRunningAppProcesses error:" + e); + return; + } + if (infoList == null || infoList.isEmpty()) { + LoggerUtil.e("detectionAppState", "RunningAppProcesses is null"); + return; + } + String packageName = DeviceUtil.getPackageName(); + for (ActivityManager.RunningAppProcessInfo info : infoList) { + if (info == null) { + continue; + } + String processName = info.processName; + if (packageName.equals(processName) + || "com.android.packageinstaller".equals(processName) + || "com.google.android.packageinstaller".equals(processName) + || "com.frogshealth.qianmu".equals(processName) + || "com.tencent.wmpf".equals(processName)) { + if (info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + return; + } } } + LoggerUtil.e("detectionAppState", "检测应用被退到后台,重新唤醒到前台"); + String deviceType = DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_TYPE); + if ("信发".equals(deviceType) || "双面屏".equals(deviceType)) { + Intent intent = new Intent( MyApplication.getInstance(), ScreenSaverActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + MyApplication.getInstance().startActivity(intent); + } else { + LoggerUtil.e("detectionAppState", "跳转到导视"); + ARouter.getInstance() + .build(Constant.ROUTE_WEB_VIEW) + .withBoolean(Constant.KEY_LOAD_H5_URL, true) + .navigation(); + } + } catch (Exception e) { + LoggerUtil.e("detectionAppState","error:" + Log.getStackTraceString(e)); } - LoggerUtil.e("detectionAppState","检测应用被退到后台,重新唤醒到前台"); - if("信发".equals( DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_TYPE))||"双面屏".equals( DeviceData.getDeviceInfo(DeviceData.HINT_DEVICE_TYPE))){ - //信发 - Intent intent = new Intent(MyApplication.getInstance(), ScreenSaverActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - MyApplication.getInstance().startActivity(intent); - }else { - LoggerUtil.e("detectionAppState","跳转到导视"); - ARouter.getInstance().build(Constant.ROUTE_WEB_VIEW).withBoolean(Constant.KEY_LOAD_H5_URL, true).navigation(); - } - } /** diff --git a/app/src/main/java/qianmu/container/util/SignWayUtil.java b/app/src/main/java/qianmu/container/util/SignWayUtil.java index 86cc950..30819e6 100644 --- a/app/src/main/java/qianmu/container/util/SignWayUtil.java +++ b/app/src/main/java/qianmu/container/util/SignWayUtil.java @@ -5,17 +5,24 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Rect; 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 android.view.View; + import androidx.core.content.FileProvider; import com.sdkapi.api.SdkApi; import com.sdkapi.common.ResultCallback; import com.sdkapi.common.ResultInfo; +import com.tclsy.extmanager.device.TDeviceManager; +import com.tclsy.extmanager.installer.TInstallerManager; +import com.tclsy.extmanager.installer.callback.PackageStatusListener; +import com.tclsy.extmanager.power.TPowerManager; import com.ys.rkapi.MyManager; import com.zcapi; @@ -65,6 +72,12 @@ public class SignWayUtil { }else if(Constant.androidBoardType.equals("huidu")){ HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.shutdown(); + }else if(Constant.androidBoardType.equals("tcl")){ + try{ + TPowerManager.getInstance().shutDown(); + }catch (Exception e){ + LoggerUtil.e("TCL:", e.getMessage()); + } }else if(Constant.androidBoardType.equals("ctf")){ Intent intent = new Intent("android.intent.action.shutdown"); MyApplication.getInstance().sendBroadcast(intent); @@ -105,6 +118,12 @@ public class SignWayUtil { }else if(Constant.androidBoardType.equals("huidu")){ HuiduTech helper = new HuiduTech(MyApplication.getInstance()); helper.reboot(); + }else if(Constant.androidBoardType.equals("tcl")){ + try{ + TPowerManager.getInstance().reboot(); + }catch (Exception e){ + LoggerUtil.e("TCL:", e.getMessage()); + } }else if(Constant.androidBoardType.equals("ctf")){ Intent intent = new Intent("android.intent.action.reboot"); MyApplication.getInstance().sendBroadcast(intent); @@ -161,6 +180,18 @@ 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("tcl")){ + try{ + TInstallerManager.getInstance().startActivityAfterInstall("qianmu.container","qianmu.container.activity.H5.UpdateFileActivity"); + TInstallerManager.getInstance().installSilentApp(path, new PackageStatusListener() { + @Override + public void result(boolean b) { + LoggerUtil.e("App更新:", String.valueOf(b)); + } + }); + }catch (Exception e){ + LoggerUtil.e("TCL:", e.getMessage()); + } }else if(Constant.androidBoardType.equals("ctf")){ Intent intent = new Intent("android.intent.action.apkinstall"); intent.putExtra("path", path); @@ -280,6 +311,11 @@ public class SignWayUtil { Intent intent2 = new Intent("android.poweroff.cancel"); MyApplication.getInstance().sendBroadcast(intent1); MyApplication.getInstance().sendBroadcast(intent2); + }else if(Constant.androidBoardType.equals("tcl")){ +// boolean isAlarmEnable = TPowerManager.getInstance().isAlarmEnable(); +// if(isAlarmEnable){ +// TPowerManager.getInstance().deleteAlarm(); +// } }else if(Constant.androidBoardType.equals("zc")){ int[] timeoffArray = {1970, 1, 1, 0, 0}; int[] timeonArray = {1970, 1, 1, 0, 0}; @@ -322,6 +358,13 @@ public class SignWayUtil { }catch(Exception exp){ LoggerUtil.e("screenShot",exp.getMessage()); } + }else if(Constant.androidBoardType.equals("tcl")){ + final View decorView = MyApplication.getInstance().getCurrentActivity().getWindow().getDecorView(); + Rect rect = new Rect(); + decorView.getWindowVisibleDisplayFrame(rect); + int w = rect.width(); + int h = rect.height(); + TDeviceManager.getInstance().screenShot(path,0,0, w, h, w, h); }else if(Constant.androidBoardType.equals("ctf")){ Intent intent = new Intent("android.intent.action.screenshoot"); intent.putExtra("path", path);