| | |
| | | import android.annotation.SuppressLint |
| | | import android.app.Application |
| | | import android.app.PendingIntent |
| | | import android.bluetooth.BluetoothAdapter |
| | | import android.bluetooth.BluetoothDevice |
| | | import android.content.Context |
| | | import android.content.Intent |
| | | import android.content.IntentFilter |
| | | import android.location.Geocoder |
| | | import android.net.ConnectivityManager |
| | | import android.net.wifi.WifiManager |
| | | 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 com.hjq.language.OnLanguageListener |
| | | 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.service.BluetoothScanService |
| | | import com.example.firstapp.service.HttpServerService |
| | | import com.example.firstapp.utils.ACTION_START |
| | | import com.example.firstapp.utils.AppInfo |
| | | import com.example.firstapp.utils.CactusSave |
| | | 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.HistoryUtils |
| | | import com.example.firstapp.utils.Log |
| | | import com.example.firstapp.utils.SettingUtils |
| | | import com.example.firstapp.utils.SharedPreference |
| | | |
| | | 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 |
| | | import io.reactivex.Observable |
| | | import io.reactivex.disposables.Disposable |
| | | import io.reactivex.schedulers.Schedulers |
| | | import kotlinx.coroutines.CoroutineScope |
| | | import kotlinx.coroutines.SupervisorJob |
| | | import java.io.BufferedWriter |
| | |
| | | import java.io.FileWriter |
| | | import java.io.IOException |
| | | import java.text.SimpleDateFormat |
| | | import java.util.Date |
| | | import java.util.Locale |
| | | import java.util.TimeZone |
| | | 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 { |
| | |
| | | } 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" |
| | |
| | | } |
| | | } |
| | | |
| | | @NonNull |
| | | override fun getWorkManagerConfiguration(): Configuration { |
| | | return Configuration.Builder() |
| | | .setMinimumLoggingLevel(android.util.Log.DEBUG) |
| | | .build() |
| | | } |
| | | |
| | | /** |
| | | * 初始化基础库 |
| | | */ |
| | |
| | | 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") |
| | |
| | | // ) |
| | | // } |
| | | |
| | | /** |
| | | * 设置定时提醒Worker |
| | | * 配置为每天运行一次检查是否有新的提醒内容 |
| | | */ |
| | | fun setupReminderWorker() { |
| | | Log.d(TAG, "设置定时提醒Worker") |
| | | |
| | | // 仅在特定时间执行(每天指定时间) |
| | | // 可根据需要设置多个不同时间点的提醒 |
| | | ReminderWorker.setupScheduledWorker(this, 9, 0) // 上午9:00 |
| | | ReminderWorker.setupScheduledWorker(this, 13, 50) // 下午13:50 |
| | | |
| | | // 不再使用周期性轮询和立即执行的方式 |
| | | } |
| | | |
| | | } |