ExamApp.kt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.dlc.exam
  2. import android.app.ActivityManager
  3. import android.app.Application
  4. import android.content.BroadcastReceiver
  5. import android.content.Context
  6. import android.content.Intent
  7. import android.content.IntentFilter
  8. import android.os.Handler
  9. import android.os.Looper
  10. import android.os.Message
  11. import android.util.Log
  12. import android.widget.Toast
  13. import androidx.localbroadcastmanager.content.LocalBroadcastManager
  14. import androidx.multidex.MultiDex
  15. import com.dlc.exam.common.Constants
  16. import com.dlc.exam.sp.EnvSp
  17. import com.dlc.exam.ui.SplashActivity
  18. import com.iflytek.cloud.SpeechConstant
  19. import com.iflytek.cloud.SpeechUtility
  20. import com.rc.core.log.RcLog
  21. import com.rc.core.util.CrashHandler
  22. import com.rc.core.util.ScreenAdapter
  23. import com.rc.httpcore.HttpClient
  24. import com.rc.httpcore.config.ConfigCore
  25. import com.rc.httpcore.config.ConfigFactory
  26. import com.rc.httpcore.vo.response.LearnLoginVo
  27. /**
  28. * info
  29. *
  30. * @author ReiChin_
  31. */
  32. class ExamApp : Application() {
  33. companion object {
  34. @JvmField
  35. var sLearnLoginVo: LearnLoginVo? = null
  36. }
  37. override fun onCreate() {
  38. super.onCreate()
  39. ScreenAdapter.initAppDensity(this)
  40. CrashHandler.initCrash(this)
  41. initBugly()
  42. // 初始化网络配置参数
  43. initHttpConfig()
  44. // 初始化讯飞语音引擎
  45. initIflytek()
  46. }
  47. private fun initHttpConfig() {
  48. HttpClient.init(this)
  49. HttpClient.token = Constants.NetExtra.TOKEN
  50. HttpClient.vName = BuildConfig.VERSION_NAME
  51. val envConfig = EnvSp.loadEnv(this)
  52. val configParam = ConfigFactory.buildReleaseConfig
  53. Constants.MqttConfig.initMqttConfig(configParam, envConfig)
  54. ConfigCore.initConfig(configParam, envConfig?.baseUrl, envConfig?.fileBrowserBaseUrl)
  55. LocalBroadcastManager.getInstance(this)
  56. .registerReceiver(object : BroadcastReceiver() {
  57. override fun onReceive(context: Context?, intent: Intent?) {
  58. if (!topActivityIsSplashActivity()) {
  59. Toast.makeText(
  60. applicationContext,
  61. "登录过期,请重新登录",
  62. Toast.LENGTH_SHORT
  63. ).show()
  64. mUiHandler.sendEmptyMessageAtTime(1, 1500)
  65. }
  66. }
  67. }, IntentFilter("com.rc.core.token_expired"))
  68. }
  69. private val mUiHandler = object : Handler(Looper.getMainLooper()) {
  70. override fun handleMessage(msg: Message) {
  71. if (1 == msg.what) {
  72. // Token过期,进入登录页
  73. val intent = Intent().apply {
  74. flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
  75. setClass(this@ExamApp, SplashActivity::class.java)
  76. }
  77. removeCallbacksAndMessages(null)
  78. startActivity(intent)
  79. }
  80. }
  81. }
  82. private fun topActivityIsSplashActivity(): Boolean {
  83. return try {
  84. val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
  85. val componentName = activityManager.getRunningTasks(1)[0].topActivity
  86. SplashActivity::class.java.name == componentName?.className
  87. } catch (e: Exception) {
  88. false
  89. }
  90. }
  91. /**
  92. * 初始化讯飞语音引擎
  93. */
  94. private fun initIflytek() {
  95. // 初始化讯飞语音引擎
  96. val param = StringBuilder().apply {
  97. append("${SpeechConstant.APPID}=${Constants.Iflytek.APP_ID},")
  98. // 设置使用v5+
  99. append("${SpeechConstant.ENGINE_MODE}=${SpeechConstant.MODE_MSC}")
  100. }.toString()
  101. val speechUtility = SpeechUtility.createUtility(this, param)
  102. val engines = speechUtility.queryAvailableEngines()
  103. RcLog.info("[Iflytek]讯飞语音引擎初始化结束")
  104. engines.forEachIndexed { index, value ->
  105. RcLog.info("[Iflytek]engines[$index]=$value")
  106. }
  107. }
  108. override fun attachBaseContext(base: Context?) {
  109. super.attachBaseContext(base)
  110. MultiDex.install(this)
  111. }
  112. private fun initBugly() {
  113. /*
  114. * 第三个参数为SDK调试模式开关,调试模式的行为特性如下:
  115. * 1) 输出详细的Bugly SDK的Log;
  116. * 2) 每一条Crash都会被立即上报;
  117. * 3) 自定义日志将会在Logcat中输出。
  118. * 建议在测试阶段建议设置成true,发布时设置为false。
  119. */
  120. // CrashReport.initCrashReport(this, Constants.Bugly.APP_ID, true)
  121. // CrashReport.initCrashReport(this, Constants.Bugly.APP_ID, false)
  122. }
  123. }