- 将布局文件中的 Button 替换为 AppCompatButton 组件 - 更新环境切换对话框中的 URL 映射关系 - 添加 LOCAL_BASE_URL 和修改 TEST_BASE_URL 的常量定义 - 启用并实现环境切换功能的时间点击事件处理 - 在 API 接口定义中使用 @Url 注解实现动态 URL 设置 - 创建 DynamicBaseUrlInterceptor 拦截器实现实时域名替换 - 更新依赖注入模块以使用新的拦截器和全局基础 URL - 修改仓库层调用以使用具名参数传递
191 lines
5.9 KiB
Kotlin
191 lines
5.9 KiB
Kotlin
package com.sw.inbound.activity
|
|
|
|
import android.content.Intent
|
|
import android.os.Bundle
|
|
import android.os.Handler
|
|
import android.os.Looper
|
|
import android.os.SystemClock
|
|
import android.view.KeyEvent
|
|
import android.view.animation.RotateAnimation
|
|
import com.sw.inbound.GlobalData
|
|
import com.sw.inbound.GlobalKey
|
|
import com.sw.inbound.base.BaseActivity
|
|
import com.sw.inbound.databinding.ActivityInitBinding
|
|
import com.sw.inbound.utils.NetworkUtils
|
|
import com.sw.inbound.utils.SPUtil
|
|
|
|
/**
|
|
* 初始化页面 Activity
|
|
* 用于应用启动时的初始化流程
|
|
* - 显示 60 秒倒计时
|
|
* - 每 10 秒检测一次网络连接
|
|
* - 网络连接成功则跳转到 HomeActivity
|
|
* - 60 秒后仍未连接则显示"连接网络"按钮
|
|
*/
|
|
class InitActivity : BaseActivity() {
|
|
|
|
private lateinit var binding: ActivityInitBinding
|
|
private val handler = Handler(Looper.getMainLooper())
|
|
private var startTime = 0L // 倒计时开始时间
|
|
private var lastNetworkCheckTime = 0L // 上次检测网络的时间
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
binding = ActivityInitBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
initViews()
|
|
}
|
|
|
|
/**
|
|
* 初始化控件事件
|
|
*/
|
|
private fun initViews() {
|
|
// 连接网络按钮点击事件
|
|
binding.btnConnectNetwork.setOnClickListener {
|
|
openNetworkSettings()
|
|
}
|
|
|
|
// 启动加载动画 - 持续旋转
|
|
startLoadingAnimation()
|
|
}
|
|
|
|
/**
|
|
* 启动加载动画 - ImageView 持续旋转
|
|
*/
|
|
private fun startLoadingAnimation() {
|
|
val rotateAnimation = RotateAnimation(
|
|
0f, 360f,
|
|
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
|
|
RotateAnimation.RELATIVE_TO_SELF, 0.5f
|
|
).apply {
|
|
duration = 1200 // 旋转周期 1.2 秒
|
|
repeatCount = RotateAnimation.INFINITE // 无限循环
|
|
repeatMode = RotateAnimation.RESTART
|
|
}
|
|
binding.ivLoading.startAnimation(rotateAnimation)
|
|
}
|
|
|
|
override fun onResume() {
|
|
super.onResume()
|
|
if (NetworkUtils.isNetworkConnected(this)) {
|
|
navigateToHome()
|
|
return
|
|
}
|
|
startCountdown()
|
|
}
|
|
|
|
override fun onPause() {
|
|
super.onPause()
|
|
// 页面不可见时停止倒计时
|
|
handler.removeCallbacksAndMessages(null)
|
|
}
|
|
|
|
/**
|
|
* 启动 60 秒倒计时
|
|
*/
|
|
private fun startCountdown() {
|
|
startTime = SystemClock.elapsedRealtime()
|
|
lastNetworkCheckTime = 0
|
|
binding.llLoading.visibility = android.view.View.VISIBLE
|
|
binding.llNetworkButton.visibility = android.view.View.GONE
|
|
binding.tvCountdown.text = "60秒"
|
|
scheduleCountdown()
|
|
}
|
|
|
|
/**
|
|
* 定时更新倒计时
|
|
* 使用 SystemClock.elapsedRealtime() 确保精确计时
|
|
*/
|
|
private fun scheduleCountdown() {
|
|
handler.postDelayed({
|
|
val elapsedTime = SystemClock.elapsedRealtime() - startTime
|
|
val remainingTime = 60 - (elapsedTime / 1000).toInt()
|
|
val currentNetworkCheckTime = (elapsedTime / 1000).toInt()
|
|
|
|
// 每 10 秒检测一次网络
|
|
if (currentNetworkCheckTime > 0 && currentNetworkCheckTime % 10 == 0 && currentNetworkCheckTime != lastNetworkCheckTime.toInt()) {
|
|
lastNetworkCheckTime = currentNetworkCheckTime.toLong()
|
|
checkNetworkConnection()
|
|
}
|
|
|
|
// 倒计时未结束,继续更新 UI
|
|
if (remainingTime > 0) {
|
|
binding.tvCountdown.text = "${remainingTime}秒"
|
|
scheduleCountdown()
|
|
} else {
|
|
// 倒计时结束,最后检测一次网络
|
|
if (NetworkUtils.isNetworkConnected(this)) {
|
|
navigateToHome()
|
|
} else {
|
|
// 网络未连接,显示"连接网络"按钮
|
|
showNetworkButton()
|
|
}
|
|
}
|
|
}, 100) // 每 100ms 检查一次,确保精确性
|
|
}
|
|
|
|
/**
|
|
* 检测网络连接
|
|
*/
|
|
private fun checkNetworkConnection() {
|
|
if (NetworkUtils.isNetworkConnected(this)) {
|
|
// 网络连接成功,停止倒计时并跳转到 HomeActivity
|
|
handler.removeCallbacksAndMessages(null)
|
|
navigateToHome()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 跳转到 HomeActivity
|
|
*/
|
|
private fun navigateToHome() {
|
|
// 优先读取用户手动切换后持久化的 url
|
|
val savedUrl = SPUtil.getInstance().get(GlobalKey.KEY_BASE_URL, "")
|
|
if (!savedUrl.isNullOrEmpty()) {
|
|
GlobalData.appBaseUrl = savedUrl
|
|
} else {
|
|
// 未保存过则使用默认逻辑:特定设备走测试环境,其余走 UAT
|
|
GlobalData.appBaseUrl = GlobalData.PROD_BASE_URL
|
|
val list = listOf(
|
|
//"5a41a2cf-3cee-3731-911d-a28b10164f7a",
|
|
"f0bcabbb-0d58-3b14-8bed-9863b7ec61ef"
|
|
)
|
|
if (list.contains(GlobalData.deviceId)) {
|
|
GlobalData.appBaseUrl = GlobalData.LOCAL_BASE_URL
|
|
}
|
|
}
|
|
val intent = Intent(this, HomeActivity::class.java)
|
|
startActivity(intent)
|
|
finish()
|
|
}
|
|
|
|
/**
|
|
* 显示"连接网络"按钮
|
|
*/
|
|
private fun showNetworkButton() {
|
|
binding.llLoading.visibility = android.view.View.GONE
|
|
binding.llNetworkButton.visibility = android.view.View.VISIBLE
|
|
}
|
|
|
|
/**
|
|
* 打开系统网络设置页面
|
|
*/
|
|
private fun openNetworkSettings() {
|
|
val intent = Intent(android.provider.Settings.ACTION_WIFI_SETTINGS)
|
|
startActivity(intent)
|
|
}
|
|
|
|
/**
|
|
* 禁用返回键
|
|
*/
|
|
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
|
return if (keyCode == KeyEvent.KEYCODE_BACK) {
|
|
// 禁用返回键,不执行任何操作
|
|
true
|
|
} else {
|
|
super.onKeyDown(keyCode, event)
|
|
}
|
|
}
|
|
}
|
|
|