LabApp.kt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.dlc.eboard
  2. //import com.squareup.leakcanary.LeakCanary
  3. //import com.squareup.leakcanary.LeakCanary
  4. import android.app.ActivityManager
  5. import android.app.Application
  6. import android.content.BroadcastReceiver
  7. import android.content.Context
  8. import android.content.Intent
  9. import android.content.IntentFilter
  10. import android.os.Bundle
  11. import android.os.Handler
  12. import android.os.Looper
  13. import android.os.Message
  14. import android.support.multidex.MultiDex
  15. import android.util.Log
  16. import android.widget.Toast
  17. import androidx.localbroadcastmanager.content.LocalBroadcastManager
  18. import com.dlc.eboard.common.CommonUtils
  19. import com.dlc.eboard.common.Constants
  20. import com.dlc.eboard.iflytek.AudioPlayerManager
  21. import com.dlc.eboard.sp.EnvSp
  22. import com.dlc.eboard.ui.SplashActivity
  23. import com.rc.core.log.RcLog
  24. import com.rc.core.util.CrashHandler
  25. import com.rc.core.util.ScreenAdapter
  26. import com.rc.httpcore.HttpClient
  27. import com.rc.httpcore.config.ConfigCore
  28. import com.rc.httpcore.config.ConfigFactory
  29. import com.rc.httpcore.vo.response.LabConfig
  30. import com.rc.httpcore.vo.response.NoticeSummaryVo
  31. import com.rc.httpcore.vo.response.UserVo
  32. import com.tencent.bugly.crashreport.CrashReport
  33. import com.tencent.smtt.export.external.TbsCoreSettings
  34. import com.tencent.smtt.sdk.QbSdk
  35. import com.tencent.smtt.sdk.QbSdk.PreInitCallback
  36. /**
  37. * info
  38. *
  39. * @author ReiChin_
  40. */
  41. class LabApp : Application() {
  42. companion object {
  43. @JvmField
  44. var sLabConfig: LabConfig? = null
  45. @JvmField
  46. var sUserVo: UserVo? = null
  47. @JvmField
  48. var sNoticeList: List<NoticeSummaryVo>? = null
  49. }
  50. override fun onCreate() {
  51. super.onCreate()
  52. ScreenAdapter.initAppDensity(this)
  53. AudioPlayerManager.init(this)
  54. CrashHandler.initCrash(this)
  55. // initBugly()
  56. // 初始化网络配置参数
  57. initHttpConfig()
  58. initX5()
  59. // LeakCanary.install(this)
  60. }
  61. private fun initHttpConfig() {
  62. HttpClient.init(this)
  63. HttpClient.token = Constants.NetExtra.TOKEN
  64. HttpClient.vName = BuildConfig.VERSION_NAME
  65. val envConfig = EnvSp.loadEnv(this)
  66. val configParam = ConfigFactory.buildReleaseConfig
  67. Constants.MqttConfig.initMqttConfig(configParam, envConfig)
  68. val apiVersion = envConfig?.apiVersion ?: Constants.NetExtra.API_VERSION
  69. ConfigCore.initConfig(configParam, envConfig?.baseUrl, envConfig?.signInCheckBaseUrlSp, apiVersion)
  70. LocalBroadcastManager.getInstance(this)
  71. .registerReceiver(object : BroadcastReceiver() {
  72. override fun onReceive(context: Context?, intent: Intent?) {
  73. if (!topActivityIsSplashActivity()) {
  74. Toast.makeText(this@LabApp, "登录过期,请重新登录", Toast.LENGTH_SHORT).show()
  75. mUiHandler.sendEmptyMessageAtTime(1, 1500)
  76. }
  77. }
  78. }, IntentFilter("com.rc.core.token_expired"))
  79. }
  80. private val mUiHandler = object : Handler(Looper.getMainLooper()) {
  81. override fun handleMessage(msg: Message) {
  82. if (1 == msg.what) {
  83. // Token过期,进入登录页
  84. val intent = Intent().apply {
  85. flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
  86. setClass(this@LabApp, SplashActivity::class.java)
  87. }
  88. //跳转后清除handler机制
  89. removeCallbacksAndMessages(null)
  90. startActivity(intent)
  91. }
  92. }
  93. }
  94. private fun topActivityIsSplashActivity(): Boolean {
  95. return try {
  96. val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
  97. val componentName = activityManager.getRunningTasks(1)[0].topActivity
  98. SplashActivity::class.java.name == componentName?.className
  99. } catch (e: Exception) {
  100. false
  101. }
  102. }
  103. override fun attachBaseContext(base: Context?) {
  104. super.attachBaseContext(base)
  105. MultiDex.install(this)
  106. }
  107. private fun initBugly() {
  108. /*
  109. * 第三个参数为SDK调试模式开关,调试模式的行为特性如下:
  110. * 1) 输出详细的Bugly SDK的Log;
  111. * 2) 每一条Crash都会被立即上报;
  112. * 3) 自定义日志将会在Logcat中输出。
  113. * 建议在测试阶段建议设置成true,发布时设置为false。
  114. */
  115. // if (BuildConfig.DEBUG) {//发布版
  116. // RcLog.DE_BUG = true
  117. // CrashReport.initCrashReport(this, Constants.Bugly.APP_ID, false)
  118. // }else {
  119. //
  120. // }
  121. CrashReport.initCrashReport(this, Constants.Bugly.APP_ID, true)
  122. CrashReport.setDeviceId(this, CommonUtils.getAndroidId())
  123. }
  124. private fun initX5() {
  125. // TBS服务
  126. val initParam = mapOf(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER to true,
  127. TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE to true)
  128. QbSdk.initTbsSettings(initParam)
  129. QbSdk.setDownloadWithoutWifi(true)
  130. QbSdk.initX5Environment(this, object : PreInitCallback {
  131. override fun onCoreInitFinished() {
  132. Log.i("LabApp", "onCoreInitFinished")
  133. }
  134. override fun onViewInitFinished(b: Boolean) {
  135. // 加载x5内核成功返回值为true,否则返回false,加载失败会调用系统的webview
  136. Log.i("LabApp", "x5初始化结果===$b")
  137. }
  138. })
  139. }
  140. }