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 6ff851a..93f4571 100644 --- a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java @@ -58,6 +58,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.lang.ref.WeakReference; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -127,60 +128,67 @@ public class WebViewActivity extends BaseActivity { private boolean isrun = false; // 是否正在听写 private KDXFUtil kxdfttsUtil; - Handler handler = new Handler() { - @SuppressLint("HandlerLeak") + private final InnerHandler handler = new InnerHandler(this); + + private static class InnerHandler extends Handler { + private final WeakReference ref; + + InnerHandler(WebViewActivity activity) { + ref = new WeakReference<>(activity); + } + @Override public void handleMessage(@NonNull Message msg) { - super.handleMessage(msg); - switch (msg.what){ - case TYPE_REFURBISH_WEBVIEW://刷新webview + WebViewActivity activity = ref.get(); + if (activity == null) return; + switch (msg.what) { + case TYPE_REFURBISH_WEBVIEW: try { - binding.web.clearCache(true); - binding.web.loadUrl(HtmlUrl); - Constant.isCoreService=true; - }catch (Exception e){ - + activity.binding.web.clearCache(true); + activity.binding.web.loadUrl(HtmlUrl); + Constant.isCoreService = true; + } catch (Exception e) { } break; - case TYPE_GO_SAVESCREEN://导视通知跳转屏保 + case TYPE_GO_SAVESCREEN: try { initFirstTime(); if (!ScreenSaverData.isProgramPlay()) return; - - if (AppData.getFrontApp().equals(DeviceUtil.getPackageName())) { //信发处于系统前端时 显示屏保页面 + if (AppData.getFrontApp().equals(DeviceUtil.getPackageName())) { EventBus.getDefault().post(new MessageEvent(Constant.ACTION_SHOW_SPLASH)); - } else { //重新启动信发软件并打开屏保页面 + } else { ARouter.getInstance().build(Constant.ROUTE_SCREEN_SAVER).navigation(); } } catch (Throwable t) { - LoggerUtil.e("WebViewActivity()", "导视通知跳转报错:"+StringUtil.getThrowableStr(t)); + LoggerUtil.e("WebViewActivity()", "导视通知跳转报错:" + StringUtil.getThrowableStr(t)); } break; case TYPE_HINT_PASSWORD: - sendEmptyMessageDelayed(TYPE_HINT_PASSWORD,1000); - if(time>=30){ - binding.layoutPass.setVisibility(View.GONE); + sendEmptyMessageDelayed(TYPE_HINT_PASSWORD, 1000); + if (activity.time >= 30) { + activity.binding.layoutPass.setVisibility(View.GONE); removeMessages(TYPE_HINT_PASSWORD); } - time++; + activity.time++; break; + case TYPE_START_SERVER: removeMessages(TYPE_REFURBISH_WEBVIEW); - sendEmptyMessageDelayed(TYPE_REFURBISH_WEBVIEW,2000); - startService(new Intent(WebViewActivity.this, CoreService.class)); - LoggerUtil.e("WebViewActivity","CoreService重启"); + sendEmptyMessageDelayed(TYPE_REFURBISH_WEBVIEW, 2000); + activity.startService(new Intent(activity, CoreService.class)); + LoggerUtil.e("WebViewActivity", "CoreService重启"); break; case TYPE_SHENG_HTML_MAG: - getHandWriting(interfaceRequestData); - interfaceRequestData=""; + activity.getHandWriting(activity.interfaceRequestData); + activity.interfaceRequestData = ""; DeviceData.saveInterfaceRequest(""); break; } } - }; + } @Override protected void initView() { diff --git a/app/src/main/java/qianmu/container/app/Constant.java b/app/src/main/java/qianmu/container/app/Constant.java index e78e00f..acb2870 100644 --- a/app/src/main/java/qianmu/container/app/Constant.java +++ b/app/src/main/java/qianmu/container/app/Constant.java @@ -23,7 +23,7 @@ public class Constant { public static String mqttState = ""; // 屏幕连接方式 public static String TTSHome="sbc"; // sbc-思必驰 kdxf-科大讯飞 (有语音的项目需要配置) // public static String androidBoardType = ""; //设备板子型号 无固定版 - public static String androidBoardType = "ys"; // 设备板子型号 ys(亿晟) 北京颐堤港定制touch + // public static String androidBoardType = "ys"; // 设备板子型号 ys(亿晟) 北京颐堤港定制touch // public static String androidBoardType = "xwst"; //设备板子型号 xwst(欣威视通3399) // public static String androidBoardType = "xwst2"; //设备板子型号 xwst2(欣威视通3588、T982、3576) // public static String androidBoardType = "zc"; //设备板子型号 zc(卓策主板——王府井喜悦、杨浦中心医院) @@ -33,7 +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 String androidBoardType = "tcl"; //TCL 982 public static final String VOID_STOP = "void_stop";// public static final String VOID_ERROR = "void_error"; @@ -95,6 +95,8 @@ public class Constant { public static final String NOVA_SCREEN_POWER_ON = "nova_screen_power_on";// 诺瓦设备截屏 public static final String NOVA_SCREEN_POWER_CLOSE = "nova_screen_power_close";// 诺瓦设备截屏 public static final String APP_SEND_PACKAGE_NAME = "action_send_packageName"; + public static long powOnId = -1; + public static long powOffId = -1; /** * 后台服务器地址 diff --git a/app/src/main/java/qianmu/container/app/MyApplication.java b/app/src/main/java/qianmu/container/app/MyApplication.java index ad1b333..8af7370 100644 --- a/app/src/main/java/qianmu/container/app/MyApplication.java +++ b/app/src/main/java/qianmu/container/app/MyApplication.java @@ -241,7 +241,7 @@ public class MyApplication extends Application { String errorLog = StringUtil.strSplice( MyApplication.getInstance().dateTimeFormat.format(new Date(timeMillis)), ":\n", throwable.getMessage(), "\n", sw.toString()); - LoggerUtil.e("APP崩溃", errorLog); + LoggerUtil.storeLogSync("APP崩溃", errorLog); if (isSystemExceptionInternal(throwable)) { try { Thread.sleep(5000); @@ -277,7 +277,7 @@ public class MyApplication extends Application { * 重启软件 */ public void restartApp() { - LoggerUtil.e("MyApplication", "重启软件"); + LoggerUtil.storeLogSync("MyApplication", "重启软件"); stopService(new Intent(this, ContainerService.class)); stopService(new Intent(this, MessengerService.class)); stopService(new Intent(this, CoreService.class)); diff --git a/app/src/main/java/qianmu/container/data/PowerData.java b/app/src/main/java/qianmu/container/data/PowerData.java index 2d8742a..f6c4c67 100644 --- a/app/src/main/java/qianmu/container/data/PowerData.java +++ b/app/src/main/java/qianmu/container/data/PowerData.java @@ -8,6 +8,7 @@ import android.util.Log; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.sdkapi.api.SdkApi; +import com.tclsy.extmanager.power.TPowerManager; import com.ys.rkapi.MyManager; import com.zcapi; @@ -265,7 +266,17 @@ public class PowerData extends BaseData { SignWayUtil.setPowerOnOffTimeFortYs(timeoffArray,timeonArray); } } - + }else if(Constant.androidBoardType.equals("tcl")){ + SignWayUtil.clearPowerOnOffTime(); + if(parameterLong > bootLong) { + Constant.powOnId = TPowerManager.getInstance().addAlarm(Integer.parseInt(on2[0]), Integer.parseInt(on2[1]), 127, 0); + Constant.powOffId = TPowerManager.getInstance().addAlarm(Integer.parseInt(off[0]), Integer.parseInt(off[1]), 127, 1); + LoggerUtil.e("PowerData()", "关机时间:"+s + " " + parameter+",开机时间:"+dateFormat.format(currentLong+24*60*60*1000)+" "+bootTime2); + }else { + Constant.powOnId = TPowerManager.getInstance().addAlarm(Integer.parseInt(on[0]), Integer.parseInt(on[1]), 127, 0); + Constant.powOffId = TPowerManager.getInstance().addAlarm(Integer.parseInt(off[0]), Integer.parseInt(off[1]), 127, 1); + LoggerUtil.e("PowerData()", "关机时间:"+s + " " + parameter+",开机时间:"+s + " " + bootTime); + } }else if(Constant.androidBoardType.equals("smt")){ //视美泰 SmdtManagerNew smdt = MyApplication.getInstance().getSmdt(); diff --git a/app/src/main/java/qianmu/container/util/LoggerUtil.java b/app/src/main/java/qianmu/container/util/LoggerUtil.java index a4b4275..666ca51 100644 --- a/app/src/main/java/qianmu/container/util/LoggerUtil.java +++ b/app/src/main/java/qianmu/container/util/LoggerUtil.java @@ -105,34 +105,39 @@ public class LoggerUtil { } - //将日志信息保存至SD卡 + //将日志信息保存至SD卡(异步,正常日志使用) public static synchronized void storeLog(String strModule, String strErrMsg) { + Executors.newSingleThreadExecutor().execute(() -> writeLogToFile(strModule, strErrMsg)); + } - Executors.newSingleThreadExecutor().execute(() -> { - if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) return; - File fileDir = new File(SAVE_LOG_DIR_PATH); - // 目录是否已经存在 - if (!fileDir.exists() && !fileDir.mkdirs()) { - Log.e(strModule, StringUtil.strSplice("Failed to create directory ", SAVE_LOG_DIR_PATH)); - return; - } - String fileName = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis()); - File file = new File(StringUtil.strSplice(SAVE_LOG_DIR_PATH, "/", fileName, ".txt")); - if(5120000L >", strModule, "<< ", strErrMsg, "\r"); - OutputStreamWriter write = new OutputStreamWriter(fos, "UTF-8"); - BufferedWriter writer = new BufferedWriter(write); - writer.write(data); - writer.close(); - write.close(); - fos.close(); - } catch (Throwable t) { - LoggerUtil.e("storeLog", StringUtil.getThrowableStr(t)); - } - }); + //将日志信息同步保存至SD卡(崩溃时使用,确保进程退出前写入完成) + public static synchronized void storeLogSync(String strModule, String strErrMsg) { + writeLogToFile(strModule, strErrMsg); + } + + private static void writeLogToFile(String strModule, String strErrMsg) { + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) return; + File fileDir = new File(SAVE_LOG_DIR_PATH); + if (!fileDir.exists() && !fileDir.mkdirs()) { + Log.e(strModule, StringUtil.strSplice("Failed to create directory ", SAVE_LOG_DIR_PATH)); + return; + } + String fileName = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis()); + File file = new File(StringUtil.strSplice(SAVE_LOG_DIR_PATH, "/", fileName, ".txt")); + if (5120000L < file.length()) return; + try { + if (!file.exists()) file.createNewFile(); + FileOutputStream fos = new FileOutputStream(file, true); + String data = StringUtil.strSplice(fmt.format(System.currentTimeMillis()), " >>", strModule, "<< ", strErrMsg, "\r"); + OutputStreamWriter write = new OutputStreamWriter(fos, "UTF-8"); + BufferedWriter writer = new BufferedWriter(write); + writer.write(data); + writer.close(); + write.close(); + fos.close(); + } catch (Throwable t) { + Log.e("storeLog", t.getMessage()); + } } diff --git a/app/src/main/java/qianmu/container/util/SignWayUtil.java b/app/src/main/java/qianmu/container/util/SignWayUtil.java index 30819e6..abc8a43 100644 --- a/app/src/main/java/qianmu/container/util/SignWayUtil.java +++ b/app/src/main/java/qianmu/container/util/SignWayUtil.java @@ -312,10 +312,11 @@ public class SignWayUtil { MyApplication.getInstance().sendBroadcast(intent1); MyApplication.getInstance().sendBroadcast(intent2); }else if(Constant.androidBoardType.equals("tcl")){ -// boolean isAlarmEnable = TPowerManager.getInstance().isAlarmEnable(); -// if(isAlarmEnable){ -// TPowerManager.getInstance().deleteAlarm(); -// } + boolean isAlarmEnable = TPowerManager.getInstance().isAlarmEnable(); + if(isAlarmEnable && Constant.powOnId != -1){ + TPowerManager.getInstance().deleteAlarm(Constant.powOnId); + TPowerManager.getInstance().deleteAlarm(Constant.powOffId); + } }else if(Constant.androidBoardType.equals("zc")){ int[] timeoffArray = {1970, 1, 1, 0, 0}; int[] timeonArray = {1970, 1, 1, 0, 0};