cloudroam
2025-04-15 3466799c94227c5ebba9fb201621e745058867ee
app/src/main/java/com/example/firstapp/App.kt
@@ -8,30 +8,23 @@
import android.content.IntentFilter
import android.location.Geocoder
import android.os.Build
import androidx.annotation.NonNull
import androidx.lifecycle.MutableLiveData
import androidx.multidex.MultiDex
import androidx.work.Configuration
import androidx.work.WorkManager
import com.gyf.cactus.Cactus
import com.gyf.cactus.callback.CactusCallback
import com.gyf.cactus.ext.cactus
import com.hjq.language.MultiLanguages
import androidx.work.*
import com.example.firstapp.core.Core
import com.example.firstapp.database.repository.ReminderRepository
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.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.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
import com.gyf.cactus.ext.cactus
import com.hjq.language.MultiLanguages
import com.king.location.LocationClient
import com.xuexiang.xutil.file.FileUtils
import frpclib.Frpclib
@@ -43,19 +36,17 @@
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 {
        const val TAG: String = "SmsForwarder"
@@ -133,19 +124,27 @@
            } catch (ex: IOException) {
                ex.printStackTrace()
            }
            //使用默认的处理方式让APP停止运行
            defaultHandler?.uncaughtException(thread, throwable)
        }
        try {
            context = applicationContext
            initLibs()
            PreferencesManager.init(this)
            //纯客户端模式
            if (SettingUtils.enablePureClientMode) return
            try {
                if (SettingUtils.enablePureClientMode) return
            } catch (e: Exception) {
                // 捕获SettingUtils未初始化的异常
                Log.e(TAG, "SettingUtils未初始化: ${e.message}")
                // 继续执行后续代码,不返回
            }
            //初始化WorkManager
            WorkManager.initialize(this, Configuration.Builder().build())
            // 初始化WorkManager
            WorkManager.initialize(this, getWorkManagerConfiguration())
            // 设置定时检查提醒的WorkManager
            setupReminderWorker()
            //动态加载FrpcLib
            val libPath = filesDir.absolutePath + "/libs"
@@ -281,6 +280,13 @@
        }
    }
    @NonNull
    override fun getWorkManagerConfiguration(): Configuration {
        return Configuration.Builder()
            .setMinimumLoggingLevel(android.util.Log.DEBUG)
            .build()
    }
    /**
     * 初始化基础库
     */
@@ -288,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")
@@ -443,4 +449,19 @@
//        )
//    }
    /**
     * 设置定时提醒Worker
     * 配置为每天运行一次检查是否有新的提醒内容
     */
    fun setupReminderWorker() {
        Log.d(TAG, "设置定时提醒Worker")
        // 仅在特定时间执行(每天指定时间)
        // 可根据需要设置多个不同时间点的提醒
        ReminderWorker.setupScheduledWorker(this, 9, 0)  // 上午9:00
        ReminderWorker.setupScheduledWorker(this, 13, 50) // 下午13:50
        // 不再使用周期性轮询和立即执行的方式
    }
}