From 27bbd0435881e408f267c99e6a253d2e17873bcc Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期五, 11 四月 2025 17:44:11 +0800
Subject: [PATCH] 1.2
---
app/src/main/java/com/example/firstapp/App.kt | 123 +++++++++++++++++++++++++++--------------
1 files changed, 81 insertions(+), 42 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/App.kt b/app/src/main/java/com/example/firstapp/App.kt
index c8fc2c4..a3992f7 100644
--- a/app/src/main/java/com/example/firstapp/App.kt
+++ b/app/src/main/java/com/example/firstapp/App.kt
@@ -11,23 +11,15 @@
import androidx.annotation.NonNull
import androidx.lifecycle.MutableLiveData
import androidx.multidex.MultiDex
-import androidx.work.Configuration
-import androidx.work.WorkManager
+import androidx.work.*
import com.example.firstapp.core.Core
import com.example.firstapp.database.repository.CodeRepository
import com.example.firstapp.database.repository.KeywordRepository
import com.example.firstapp.database.repository.MsgRepository
-import com.example.firstapp.database.repository.ReminderRepository
import com.example.firstapp.database.service.RetrofitClient
import com.example.firstapp.receiver.CactusReceiver
-import com.example.firstapp.utils.AppInfo
-import com.example.firstapp.utils.FRONT_CHANNEL_ID
-import com.example.firstapp.utils.FRONT_CHANNEL_NAME
-import com.example.firstapp.utils.FRONT_NOTIFY_ID
-import com.example.firstapp.utils.FRPC_LIB_VERSION
-import com.example.firstapp.utils.Log
-import com.example.firstapp.utils.PreferencesManager
-import com.example.firstapp.utils.SettingUtils
+import com.example.firstapp.service.ReminderWorker
+import com.example.firstapp.utils.*
import com.example.firstapp.utils.tinker.TinkerLoadLibrary
import com.gyf.cactus.Cactus
import com.gyf.cactus.callback.CactusCallback
@@ -44,17 +36,16 @@
import java.io.FileWriter
import java.io.IOException
import java.text.SimpleDateFormat
-import java.util.Date
-import java.util.Locale
+import java.util.*
+import java.util.concurrent.TimeUnit
@Suppress("DEPRECATION")
-class App : Application(), CactusCallback, Configuration.Provider by Core {
+class App : Application(), CactusCallback, Configuration.Provider {
val applicationScope = CoroutineScope(SupervisorJob())
val database by lazy { AppDatabase.getInstance(this) }
val msgRepository by lazy { MsgRepository(database.msgDao()) }
val codeRepository by lazy { CodeRepository(database.codeDao()) }
- val reminderRepository by lazy { ReminderRepository(database.reminderDao()) }
val keywordRepository by lazy { KeywordRepository(RetrofitClient.apiService,database.keywordDao()) }
companion object {
@@ -133,7 +124,6 @@
} catch (ex: IOException) {
ex.printStackTrace()
}
- //使用默认的处理方式让APP停止运行
defaultHandler?.uncaughtException(thread, throwable)
}
@@ -141,12 +131,20 @@
context = applicationContext
initLibs()
PreferencesManager.init(this)
- //纯客户端模式
- if (SettingUtils.enablePureClientMode) return
- //初始化WorkManager
-// WorkManager.initialize(this, Configuration.Builder().build())
+ try {
+ if (SettingUtils.enablePureClientMode) return
+ } catch (e: Exception) {
+ // 捕获SettingUtils未初始化的异常
+ Log.e(TAG, "SettingUtils未初始化: ${e.message}")
+ // 继续执行后续代码,不返回
+ }
+
+ // 初始化WorkManager
WorkManager.initialize(this, getWorkManagerConfiguration())
+
+ // 设置定时检查提醒的WorkManager
+ setupReminderWorker()
//动态加载FrpcLib
val libPath = filesDir.absolutePath + "/libs"
@@ -285,7 +283,7 @@
@NonNull
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
- .setMinimumLoggingLevel(android.util.Log.DEBUG) // 设置日志级别
+ .setMinimumLoggingLevel(android.util.Log.DEBUG)
.build()
}
@@ -296,39 +294,39 @@
Core.init(this)
Log.init(applicationContext)
// 配置文件初始化
- /* SharedPreference.init(applicationContext)
+ SharedPreference.init(applicationContext)
// X系列基础库初始化
// XBasicLibInit.init(this)
// 初始化日志打印
isDebug = SettingUtils.enableDebugMode
Log.init(applicationContext)
// 转发历史工具类初始化
- HistoryUtils.init(applicationContext)
+// HistoryUtils.init(applicationContext)
// 版本更新初始化
// XUpdateInit.init(this)
// 运营统计数据
// UMengInit.init(this)
// 初始化语种切换框架
- MultiLanguages.init(this)
+// MultiLanguages.init(this)
// 设置语种变化监听器
- MultiLanguages.setOnLanguageListener(object : OnLanguageListener {
- override fun onAppLocaleChange(oldLocale: Locale, newLocale: Locale) {
- // 注意:只有setAppLanguage时触发,clearAppLanguage时不触发
- Log.i(TAG, "监听到应用切换了语种,旧语种:$oldLocale,新语种:$newLocale")
- switchLanguage(newLocale)
- }
-
- override fun onSystemLocaleChange(oldLocale: Locale, newLocale: Locale) {
- Log.i(TAG, "监听到系统切换了语种,旧语种:$oldLocale,新语种:$newLocale")
- switchLanguage(newLocale)
- *//*val isFlowSystem = SettingUtils.isFlowSystemLanguage //MultiLanguages.isSystemLanguage(context)取值不对,一直是false
- Log.i(TAG, "监听到系统切换了语种,旧语种:$oldLocale,新语种:$newLocale,是否跟随系统:$isFlowSystem")
- if (isFlowSystem) {
- CommonUtils.switchLanguage(oldLocale, newLocale)
- }*//*
- }
- })
- switchLanguage(MultiLanguages.getAppLanguage(this))*/
+// MultiLanguages.setOnLanguageListener(object : OnLanguageListener {
+// override fun onAppLocaleChange(oldLocale: Locale, newLocale: Locale) {
+// // 注意:只有setAppLanguage时触发,clearAppLanguage时不触发
+// Log.i(TAG, "监听到应用切换了语种,旧语种:$oldLocale,新语种:$newLocale")
+// switchLanguage(newLocale)
+// }
+//
+// override fun onSystemLocaleChange(oldLocale: Locale, newLocale: Locale) {
+// Log.i(TAG, "监听到系统切换了语种,旧语种:$oldLocale,新语种:$newLocale")
+// switchLanguage(newLocale)
+// *//*val isFlowSystem = SettingUtils.isFlowSystemLanguage //MultiLanguages.isSystemLanguage(context)取值不对,一直是false
+// Log.i(TAG, "监听到系统切换了语种,旧语种:$oldLocale,新语种:$newLocale,是否跟随系统:$isFlowSystem")
+// if (isFlowSystem) {
+// CommonUtils.switchLanguage(oldLocale, newLocale)
+// }*//*
+// }
+// })
+// switchLanguage(MultiLanguages.getAppLanguage(this))
}
@SuppressLint("CheckResult")
@@ -451,4 +449,45 @@
// )
// }
+ /**
+ * 设置定时提醒Worker
+ * 配置为每天运行一次检查是否有新的提醒内容
+ */
+ private fun setupReminderWorker() {
+ Log.d(TAG, "设置定时提醒Worker")
+
+ // 方式1:使用周期性执行
+ val constraints = Constraints.Builder()
+ .setRequiredNetworkType(NetworkType.CONNECTED)
+ .build()
+
+ // 创建周期性工作请求
+ val reminderWorkRequest = PeriodicWorkRequestBuilder<ReminderWorker>(
+ ReminderWorker.REPEAT_INTERVAL,
+ ReminderWorker.REPEAT_INTERVAL_TIME_UNIT
+ )
+ .setConstraints(constraints)
+ .addTag("reminder_worker")
+ .build()
+
+ // 使用 REPLACE 策略确保新配置生效
+ WorkManager.getInstance(this).enqueueUniquePeriodicWork(
+ "reminder_work",
+ ExistingPeriodicWorkPolicy.REPLACE,
+ reminderWorkRequest
+ )
+
+ // 方式2:设置在特定时间执行(例如每天上午9点和下午18点)
+ // 可根据需要设置多个不同时间点的提醒
+ ReminderWorker.setupScheduledWorker(this, 9, 0) // 上午9:00
+ ReminderWorker.setupScheduledWorker(this, 13, 50) // 下午18:00
+
+ // 注意:不再立即执行一次提醒检查,避免重复提醒
+ // 如果需要立即检查,可以设置一个延迟,例如5分钟后执行
+ val delayedWorkRequest = OneTimeWorkRequestBuilder<ReminderWorker>()
+ .setInitialDelay(5, TimeUnit.MINUTES) // 延迟5分钟执行
+ .build()
+ WorkManager.getInstance(this).enqueue(delayedWorkRequest)
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3