diff --git a/app/src/main/java/com/shuwei/dish/match/base/BaseActivity.kt b/app/src/main/java/com/shuwei/dish/match/base/BaseActivity.kt
index 831b77a..8cb9e1c 100644
--- a/app/src/main/java/com/shuwei/dish/match/base/BaseActivity.kt
+++ b/app/src/main/java/com/shuwei/dish/match/base/BaseActivity.kt
@@ -129,7 +129,7 @@ open class BaseActivity : AppCompatActivity() {
binding.tvLeftTime.text = arr[1]
}
- private val handler = Handler(Looper.getMainLooper())
+ val handler = Handler(Looper.getMainLooper())
private val updateTask = object : Runnable {
override fun run() {
updateDateTime()
diff --git a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt
index 1a4e74e..6c6b888 100644
--- a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt
+++ b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt
@@ -1,7 +1,14 @@
package com.shuwei.dish.match.ui
import android.annotation.SuppressLint
+import android.content.Intent
+import android.graphics.Color
import android.os.Bundle
+import android.os.SystemClock
+import android.view.KeyEvent
+import android.view.animation.RotateAnimation
+import androidx.activity.OnBackPressedCallback
+import androidx.core.graphics.toColorInt
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.shuwei.dish.match.base.BaseActivity
@@ -11,6 +18,7 @@ import com.shuwei.dish.match.base.GlobalData
import com.shuwei.dish.match.databinding.ActivityInitBinding
import com.shuwei.dish.match.db.AppRepository
import com.shuwei.dish.match.utils.AppUtil
+import com.shuwei.dish.match.utils.NetworkUtils
import com.shuwei.dish.match.utils.SpTool
import com.shuwei.dish.match.utils.Weigher2
import com.shuwei.dish.match.utils.WeightUtil
@@ -28,10 +36,13 @@ class InitActivity : BaseActivity() {
private lateinit var binding: ActivityInitBinding
private lateinit var appViewModel: AppViewModel
+ private var startTime = 0L // 倒计时开始时间
+ private var lastNetworkCheckTime = 0L // 上次检测网络的时间
@SuppressLint("HardwareIds")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ addBackKeyListener()
statusBarDarkFont(enable = true)
// useBackground(false)
binding = ActivityInitBinding.inflate(layoutInflater)
@@ -45,7 +56,6 @@ class InitActivity : BaseActivity() {
BaseApp.canteenId = "0"
-
initViewModel()
// 主设备上/dev/ttyS7,子设备是/dev/ttyS4
@@ -59,7 +69,10 @@ class InitActivity : BaseActivity() {
WeightUtil.init()
WeightUtil.getWeight()
WeightUtil.startContinuousRead()
- countDown()
+
+ initViews()
+
+// countDown()
}
private fun initViewModel() {
@@ -136,4 +149,131 @@ class InitActivity : BaseActivity() {
super.onDestroy()
}
+
+ /**
+ * 初始化控件事件
+ */
+ 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)) {
+ startNextPage()
+ return
+ }
+ startCountdown()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ // 页面不可见时停止倒计时
+ handler.removeCallbacksAndMessages(null)
+ }
+
+ /**
+ * 启动 60 秒倒计时
+ */
+ private fun startCountdown() {
+ startTime = SystemClock.elapsedRealtime()
+ lastNetworkCheckTime = 0
+// binding.llNetwork.setBackgroundColor(Color.TRANSPARENT)
+ 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)) {
+ startNextPage()
+ } else {
+ // 网络未连接,显示"连接网络"按钮
+ showNetworkButton()
+ }
+ }
+ }, 100) // 每 100ms 检查一次,确保精确性
+ }
+
+ /**
+ * 检测网络连接
+ */
+ private fun checkNetworkConnection() {
+ if (NetworkUtils.isNetworkConnected(this)) {
+ // 网络连接成功,停止倒计时并跳转到 HomeActivity
+ handler.removeCallbacksAndMessages(null)
+ startNextPage()
+ }
+ }
+
+
+ /**
+ * 显示"连接网络"按钮
+ */
+ private fun showNetworkButton() {
+// binding.llNetwork.setBackgroundColor("#5C77F7".toColorInt())
+ 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)
+ }
+
+ private fun addBackKeyListener() {
+ onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ // 禁用返回键,不执行任何操作
+ }
+ })
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/shuwei/dish/match/utils/NetworkUtils.kt b/app/src/main/java/com/shuwei/dish/match/utils/NetworkUtils.kt
new file mode 100644
index 0000000..4a8c3eb
--- /dev/null
+++ b/app/src/main/java/com/shuwei/dish/match/utils/NetworkUtils.kt
@@ -0,0 +1,24 @@
+package com.shuwei.dish.match.utils
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+
+/**
+ * 网络连接检测工具类
+ * 提供检测设备网络连接状态的功能
+ */
+object NetworkUtils {
+
+ /**
+ * 检测设备是否连接到网络
+ * @param context 应用上下文
+ * @return true 表示已连接网络,false 表示未连接
+ */
+ fun isNetworkConnected(context: Context): Boolean {
+ val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ val network = connectivityManager.activeNetwork ?: return false
+ val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
+ return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ }
+}
diff --git a/app/src/main/res/drawable/btn_connect_network.xml b/app/src/main/res/drawable/btn_connect_network.xml
new file mode 100644
index 0000000..14a7909
--- /dev/null
+++ b/app/src/main/res/drawable/btn_connect_network.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_network_error.xml b/app/src/main/res/drawable/ic_network_error.xml
new file mode 100644
index 0000000..6bb312d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_network_error.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/loading_spinner.xml b/app/src/main/res/drawable/loading_spinner.xml
new file mode 100644
index 0000000..7ad8f85
--- /dev/null
+++ b/app/src/main/res/drawable/loading_spinner.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_init.xml b/app/src/main/res/layout/activity_init.xml
index f3d7cf8..3d5cff3 100644
--- a/app/src/main/res/layout/activity_init.xml
+++ b/app/src/main/res/layout/activity_init.xml
@@ -1,51 +1,145 @@
-
+ android:layout_height="match_parent">
-
-
-
+ android:orientation="vertical">
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file