From e55b71ef4b8ee5433e99b548e3b3785782633e51 Mon Sep 17 00:00:00 2001 From: jjLv <1981429112@qq.com> Date: Mon, 12 May 2025 13:34:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=9B=B4=E6=96=B0=E6=9C=AC=E5=9C=B0=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E6=95=B0=E6=8D=AE=E6=AF=94=E5=A6=82=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bonus/canteen/SmartCanteenApp.java | 21 ++++++ .../canteen/activity/OperationActivity.java | 19 ++++- .../setting/ParamSettingsActivity.java | 34 +++++++-- .../bonus/canteen/db/ConfigRepository.java | 69 ++++++++++++++++++ .../com/bonus/canteen/utils/WorkConfig.java | 73 ++++++++++++------- 5 files changed, 180 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/com/bonus/canteen/db/ConfigRepository.java diff --git a/app/src/main/java/com/bonus/canteen/SmartCanteenApp.java b/app/src/main/java/com/bonus/canteen/SmartCanteenApp.java index a4a7fcd..a240565 100644 --- a/app/src/main/java/com/bonus/canteen/SmartCanteenApp.java +++ b/app/src/main/java/com/bonus/canteen/SmartCanteenApp.java @@ -23,6 +23,8 @@ import android.content.Context; import androidx.multidex.BuildConfig; import androidx.multidex.MultiDex; +import com.bonus.canteen.db.AppDatabase; +import com.bonus.canteen.db.ConfigRepository; import com.bonus.canteen.utils.sdkinit.ANRWatchDogInit; import com.bonus.canteen.utils.sdkinit.UMengInit; import com.bonus.canteen.utils.sdkinit.XBasicLibInit; @@ -32,6 +34,8 @@ import com.bonus.canteen.utils.sdkinit.XBasicLibInit; * @since 2018/11/7 下午1:12 */ public class SmartCanteenApp extends Application { + private static ConfigRepository configRepository; + private static SmartCanteenApp instance; @Override protected void attachBaseContext(Context base) { @@ -43,9 +47,26 @@ public class SmartCanteenApp extends Application { @Override public void onCreate() { super.onCreate(); + instance = this; initLibs(); + initConfigRepository(); + } + /** + * 初始化配置仓库 + */ + private void initConfigRepository() { + configRepository = new ConfigRepository(AppDatabase.getDatabase(this).parameterInfoDao()); + } + /** + * 获取全局 Application 实例 + */ + public static Context getAppContext() { + return instance; } + public static ConfigRepository getConfigRepository() { + return configRepository; + } /** * 初始化基础库 */ diff --git a/app/src/main/java/com/bonus/canteen/activity/OperationActivity.java b/app/src/main/java/com/bonus/canteen/activity/OperationActivity.java index b27aed2..70d7d0e 100644 --- a/app/src/main/java/com/bonus/canteen/activity/OperationActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/OperationActivity.java @@ -1,6 +1,7 @@ package com.bonus.canteen.activity; import android.annotation.SuppressLint; +import android.app.ActivityManager; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -1015,11 +1016,23 @@ public class OperationActivity extends BaseActivity { + // 获取应用的包名 + String packageName = getBaseContext().getPackageName(); + // 获取ActivityManager服务 + ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + // 终止所有后台进程 + if (activityManager != null) { + activityManager.killBackgroundProcesses(packageName); + } // 重启应用程序 Intent intent = getBaseContext().getPackageManager() - .getLaunchIntentForPackage(getBaseContext().getPackageName()); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); + .getLaunchIntentForPackage(packageName); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + } + // 终止当前进程 + android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); dialog.dismiss(); }, diff --git a/app/src/main/java/com/bonus/canteen/activity/setting/ParamSettingsActivity.java b/app/src/main/java/com/bonus/canteen/activity/setting/ParamSettingsActivity.java index d76e537..b4bf50b 100644 --- a/app/src/main/java/com/bonus/canteen/activity/setting/ParamSettingsActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/setting/ParamSettingsActivity.java @@ -17,6 +17,8 @@ package com.bonus.canteen.activity.setting; +import android.app.ActivityManager; +import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; @@ -25,8 +27,10 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; +import com.bonus.canteen.SmartCanteenApp; import com.bonus.canteen.core.BaseActivity; import com.bonus.canteen.db.AppDatabase; +import com.bonus.canteen.db.ConfigRepository; import com.bonus.canteen.db.entity.base.ParamSettingInfo; import com.bonus.canteen.utils.ThreadPoolManager; import com.bonus.canteen.utils.WorkConfig; @@ -88,15 +92,30 @@ public class ParamSettingsActivity extends BaseActivity { //保存数据库 + ConfigRepository configRepository = SmartCanteenApp.getConfigRepository(); + configRepository.reloadCache(paramSettingInfo); ThreadPoolManager.getExecutor().execute(() -> { AppDatabase.getDatabase(this).parameterInfoDao().update(paramSettingInfo); runOnUiThread(() -> { + // 获取应用的包名 + String packageName = getBaseContext().getPackageName(); + // 获取ActivityManager服务 + ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + // 终止所有后台进程 + if (activityManager != null) { + activityManager.killBackgroundProcesses(packageName); + } // 重启应用程序 Intent intent = getBaseContext().getPackageManager() - .getLaunchIntentForPackage(getBaseContext().getPackageName()); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(intent); + .getLaunchIntentForPackage(packageName); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + } + // 终止当前进程 + android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); + dialog.dismiss(); }); }); @@ -121,6 +140,7 @@ public class ParamSettingsActivity extends BaseActivity openDialog("IP地址", "ipAddress",paramSettingInfo.getIpAddress(), 1)); + binding.ipAddress.setOnClickListener(v -> openDialog("IP地址", "ipAddress", paramSettingInfo.getIpAddress(), 1)); binding.mqttAddress.setOnClickListener(v -> openDialog("MQTT地址", "mqttAddress", paramSettingInfo.getMqttAddress(), 1)); - binding.mqttUserName.setOnClickListener(v -> openDialog("MQTT用户名", "mqttUserName",paramSettingInfo.getMqttUserName(), 1)); + binding.mqttUserName.setOnClickListener(v -> openDialog("MQTT用户名", "mqttUserName", paramSettingInfo.getMqttUserName(), 1)); binding.mqttPassWord.setOnClickListener(v -> openDialog("MQTT密码", "mqttPassWord", paramSettingInfo.getMqttPassword(), 1)); - binding.appId.setOnClickListener(v -> openDialog("AppId", "appId",paramSettingInfo.getAppId(), 1)); - binding.appKey.setOnClickListener(v -> openDialog("AppKey", "appKey",paramSettingInfo.getAppKey(), 1)); + binding.appId.setOnClickListener(v -> openDialog("AppId", "appId", paramSettingInfo.getAppId(), 1)); + binding.appKey.setOnClickListener(v -> openDialog("AppKey", "appKey", paramSettingInfo.getAppKey(), 1)); binding.facePassRate.setOnClickListener(v -> openDialog("人脸识别通过率\n提示:请输入 0.8 - 1 之间的数字", "facePassRate", paramSettingInfo.getFacePassRate(), 2)); binding.photoPrefix.setOnClickListener(v -> openDialog("图片前缀", "photoPrefix", paramSettingInfo.getPhotoPrefixes(), 1)); } diff --git a/app/src/main/java/com/bonus/canteen/db/ConfigRepository.java b/app/src/main/java/com/bonus/canteen/db/ConfigRepository.java new file mode 100644 index 0000000..6df6551 --- /dev/null +++ b/app/src/main/java/com/bonus/canteen/db/ConfigRepository.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.bonus.canteen.db; + +import com.bonus.canteen.db.dao.base.ParamSettingInfoDao; +import com.bonus.canteen.db.entity.base.ParamSettingInfo; + +import java.util.HashMap; +import java.util.Map; + +public class ConfigRepository { + private final ParamSettingInfoDao paramSettingDao; + private final Map configCache = new HashMap<>(); + + public ConfigRepository(ParamSettingInfoDao paramSettingDao) { + this.paramSettingDao = paramSettingDao; + // 异步加载配置到缓存 + new Thread(() -> { + ParamSettingInfo paramSettingInfo = paramSettingDao.getOneInfo(); + if (paramSettingInfo != null) { + configCache.put("baseUrl", paramSettingInfo.getIpAddress() + "/smart-canteen"); + configCache.put("prefixesUrl", paramSettingInfo.getIpAddress()); + configCache.put("serverUri", paramSettingInfo.getMqttAddress()); + configCache.put("fileUrl", paramSettingInfo.getPhotoPrefixes()); + configCache.put("APP_ID", paramSettingInfo.getAppId()); + configCache.put("APP_KEY", paramSettingInfo.getAppKey()); + configCache.put("MqttUserName", paramSettingInfo.getMqttUserName()); + configCache.put("MqttPassWord", paramSettingInfo.getMqttPassword()); + configCache.put("FACE_PASS_RATE", paramSettingInfo.getFacePassRate()); + } + }).start(); + } + + public void reloadCache(ParamSettingInfo paramSettingInfo) { + configCache.clear(); + configCache.put("baseUrl", paramSettingInfo.getIpAddress() + "/smart-canteen"); + configCache.put("prefixesUrl", paramSettingInfo.getIpAddress()); + configCache.put("serverUri", paramSettingInfo.getMqttAddress()); + configCache.put("fileUrl", paramSettingInfo.getPhotoPrefixes()); + configCache.put("APP_ID", paramSettingInfo.getAppId()); + configCache.put("APP_KEY", paramSettingInfo.getAppKey()); + configCache.put("MqttUserName", paramSettingInfo.getMqttUserName()); + configCache.put("MqttPassWord", paramSettingInfo.getMqttPassword()); + configCache.put("FACE_PASS_RATE", paramSettingInfo.getFacePassRate()); + } + + public String getValue(String key) { + return configCache.get(key); + } + + public void updateConfig() { + configCache.clear(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java index aff05c6..3d82f0d 100644 --- a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java +++ b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java @@ -17,12 +17,8 @@ package com.bonus.canteen.utils; -import static com.ccb.facedevice.sdk.utils.AppUtil.getApplication; - -import android.util.Log; - -import com.bonus.canteen.db.AppDatabase; -import com.bonus.canteen.db.entity.base.ParamSettingInfo; +import com.bonus.canteen.SmartCanteenApp; +import com.bonus.canteen.db.ConfigRepository; public class WorkConfig { //本地 @@ -30,9 +26,7 @@ public class WorkConfig { // protected static String prefixesUrl = "http://192.168.0.34:48380"; protected static String baseUrl = "http://36.33.26.201:48380/smart-canteen"; protected static String prefixesUrl = "http://36.33.26.201:48380"; - protected static String fileUrl = "http://36.33.26.201:48380/lnyst/"; - private static String updateUrl = "https://www.baidu.com"; private static String serverUri = "tcp://36.33.26.201:51883"; private static String MqttUserName = "admin"; @@ -41,57 +35,84 @@ public class WorkConfig { private static String APP_KEY = "9YFPa6eiuNQAFnzJUadn4LaR8w1bcw3a5ZWYZB6FB57Y"; private static String FACE_PASS_RATE = "0.8"; - static { - ThreadPoolManager.getExecutor().execute(()->{ - ParamSettingInfo paramSettingInfo = AppDatabase.getDatabase(getApplication()).parameterInfoDao().getOneInfo(); - if (paramSettingInfo != null){ - baseUrl = paramSettingInfo.getIpAddress() + "/smart-canteen"; - prefixesUrl = paramSettingInfo.getIpAddress(); - serverUri = paramSettingInfo.getMqttAddress(); - fileUrl = paramSettingInfo.getPhotoPrefixes(); - APP_ID = paramSettingInfo.getAppId(); - APP_KEY = paramSettingInfo.getAppKey(); - MqttUserName = paramSettingInfo.getMqttUserName(); - MqttPassWord = paramSettingInfo.getMqttPassword(); - FACE_PASS_RATE = paramSettingInfo.getFacePassRate(); - } - }); - } - public static String getBaseUrl() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("baseUrl") != null) { + return repo.getValue("baseUrl"); + } return baseUrl; } public static String getPrefixesUrl() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("prefixesUrl") != null) { + return repo.getValue("prefixesUrl"); + } return prefixesUrl; } public static String getUpdateUrl() { return updateUrl; } public static String getMqttUrl() { - Log.d("mqttUrl",serverUri); + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("serverUri") != null) { + return repo.getValue("serverUri"); + } return serverUri; } public static String getFileUrl() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("fileUrl") != null) { + return repo.getValue("fileUrl"); + } return fileUrl; } public static String getMqttUserName() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("MqttUserName") != null) { + return repo.getValue("MqttUserName"); + } return MqttUserName; } public static String getMqttPassWord() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("MqttPassWord") != null) { + return repo.getValue("MqttPassWord"); + } return MqttPassWord; } public static String getAppId() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("APP_ID") != null) { + return repo.getValue("APP_ID"); + } return APP_ID; } public static String getAppKey() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("APP_KEY") != null) { + return repo.getValue("APP_KEY"); + } return APP_KEY; } public static String getFacePassRate() { + ConfigRepository repo = SmartCanteenApp.getConfigRepository(); + //判断是否存在某个配置 + if (repo != null && repo.getValue("FACE_PASS_RATE") != null) { + return repo.getValue("FACE_PASS_RATE"); + } return FACE_PASS_RATE; } }