From 6a1a1f3c5cd3bc0ab42cc4a4c9e72685f0644024 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Mon, 13 Apr 2026 09:36:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(activity):=20=E6=96=B0=E5=A2=9E=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=A1=B5=E7=BD=91=E7=BB=9C=E6=A3=80=E6=B5=8B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C60=E7=A7=92=E5=80=92=E8=AE=A1=E6=97=B6?= =?UTF-8?q?=E5=90=8E=E6=98=BE=E7=A4=BA=E8=BF=9E=E6=8E=A5=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shuwei/dish/match/base/BaseActivity.kt | 2 +- .../com/shuwei/dish/match/ui/InitActivity.kt | 144 +++++++++++++- .../shuwei/dish/match/utils/NetworkUtils.kt | 24 +++ .../main/res/drawable/btn_connect_network.xml | 9 + .../main/res/drawable/ic_network_error.xml | 11 ++ app/src/main/res/drawable/loading_spinner.xml | 14 ++ app/src/main/res/layout/activity_init.xml | 178 +++++++++++++----- 7 files changed, 337 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/com/shuwei/dish/match/utils/NetworkUtils.kt create mode 100644 app/src/main/res/drawable/btn_connect_network.xml create mode 100644 app/src/main/res/drawable/ic_network_error.xml create mode 100644 app/src/main/res/drawable/loading_spinner.xml 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +