打开增加检查网络情况

This commit is contained in:
2026-02-11 14:48:30 +08:00
parent ac30d95812
commit 0c990ea7ee
7 changed files with 136 additions and 47 deletions
+1
View File
@@ -8,6 +8,7 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /> android:maxSdkVersion="32" />
@@ -1,16 +1,22 @@
package com.sw.dualscreen.activity package com.sw.dualscreen.activity
import android.content.Intent import android.content.Intent
import android.os.CountDownTimer
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.sw.dualscreen.GlobalData import com.sw.dualscreen.GlobalData
import com.sw.dualscreen.databinding.ActivityInitBinding import com.sw.dualscreen.databinding.ActivityInitBinding
import com.sw.dualscreen.dialog.RemindDialog
import com.sw.dualscreen.ext.clickWithDebounce
import com.sw.dualscreen.ext.visible
import com.sw.dualscreen.model.response.FoodVector import com.sw.dualscreen.model.response.FoodVector
import com.sw.dualscreen.objbox.Food import com.sw.dualscreen.objbox.Food
import com.sw.dualscreen.objbox.FoodModule import com.sw.dualscreen.objbox.FoodModule
import com.sw.dualscreen.objbox.ObjectBox import com.sw.dualscreen.objbox.ObjectBox
import com.sw.dualscreen.utils.L
import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.BaseViewModel
import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.dualscreen.viewmodel.UserViewModel
import com.sw.plate.utils.AppUtil
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class InitActivity : BaseActivity<ActivityInitBinding>() { class InitActivity : BaseActivity<ActivityInitBinding>() {
@@ -37,7 +43,11 @@ class InitActivity : BaseActivity<ActivityInitBinding>() {
"version" to GlobalData.foodModelVersion "version" to GlobalData.foodModelVersion
) )
) { items -> ) { items ->
val list = items ?: emptyList() if (items == null) {
getVectorErrorDialog()
return@getCollectedFoodVector
}
val list = items
if (pageNum == 1 && list.isEmpty()) { if (pageNum == 1 && list.isEmpty()) {
block() block()
return@getCollectedFoodVector return@getCollectedFoodVector
@@ -75,20 +85,13 @@ class InitActivity : BaseActivity<ActivityInitBinding>() {
override fun initialize() { override fun initialize() {
super.initialize() super.initialize()
showWaitingDialog("加载中……") initNetworkTimer()
lifecycleScope.launch { binding.okButton.clickWithDebounce(500) {
FoodModule.init(this@InitActivity) { checkNetworkTimer?.cancel()
getCollectedFoodVector { checkNetworkTimer?.start()
runOnUiThread {
hideWaitingDialog()
binding.root.postDelayed({
goMainActivity()
}, 1000)
} }
} showWaitingDialog("网络连接中...")
} checkNetworkTimer?.start()
}
// val isSuccess = viewModel.checkEquipmentInfo() // val isSuccess = viewModel.checkEquipmentInfo()
// if (isSuccess) { // if (isSuccess) {
@@ -116,9 +119,69 @@ class InitActivity : BaseActivity<ActivityInitBinding>() {
// } // }
} }
private fun getCollectedFoodVector() {
showWaitingDialog2("加载中……")
lifecycleScope.launch {
FoodModule.init(this@InitActivity) {
getCollectedFoodVector {
runOnUiThread {
hideWaitingDialog()
binding.root.postDelayed({
goMainActivity()
}, 1000)
}
}
}
}
}
private fun goMainActivity() { private fun goMainActivity() {
val intent = Intent(this, MainActivity::class.java) val intent = Intent(this, MainActivity::class.java)
startActivity(intent) startActivity(intent)
finish() finish()
} }
private var checkNetworkTimer: CountDownTimer? = null
private fun initNetworkTimer() {
checkNetworkTimer = object : CountDownTimer(5 * 300, 300) {
override fun onTick(millisUntilFinished: Long) {
}
override fun onFinish() {
L.e("检测网络连接状态" + AppUtil.isNetworkConnected(this@InitActivity))
if (!AppUtil.isNetworkConnected(this@InitActivity)) {
hideWaitingDialog()
binding.okButton.visible()
loadNetworkErrorDialog()
return
}
getCollectedFoodVector()
}
}
}
private fun loadNetworkErrorDialog() {
RemindDialog(
context = context,
content = "网络连接异常,请检查WiFi连接状态后重试",
confirmBlock = {
startActivity(Intent("android.settings.WIFI_SETTINGS"))
}).show()
}
private fun getVectorErrorDialog() {
RemindDialog(
context = context,
content = "未查询到向量数据,请稍后重试?",
confirmBlock = {
getCollectedFoodVector()
}).show()
}
override fun onDestroy() {
checkNetworkTimer?.cancel()
super.onDestroy()
}
} }
@@ -916,8 +916,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
// private val initialDelay = 5 * 60 * 1000L // private val initialDelay = 5 * 60 * 1000L
// private val dealyMillis = 10 * 60 * 1000L // private val dealyMillis = 10 * 60 * 1000L
private val initialDelay = 30 * 1000L private val initialDelay = 30 * 1000L
private val dealyMillis = 60 * 1000L private val dealyMillis = 3 * 60 * 1000L
private var taskPageNo = 1 // private var taskPageNo = 1
fun startFaceTask() { fun startFaceTask() {
faceTaskJob = faceTaskJob =
intervalExecutor.startIntervalTaskWithInitialDelay(initialDelay, dealyMillis) { intervalExecutor.startIntervalTaskWithInitialDelay(initialDelay, dealyMillis) {
@@ -926,10 +926,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
return@startIntervalTaskWithInitialDelay return@startIntervalTaskWithInitialDelay
} }
viewModel.getFaceIncrementList( viewModel.getFaceIncrementList(
pageNo = taskPageNo, // pageNo = taskPageNo,
timestamp = timestamp, timestamp = timestamp,
onAllQueryFinished = { onAllQueryFinished = {
taskPageNo = 1 // taskPageNo = 1
}, },
onPageQueryFinished = { list -> onPageQueryFinished = { list ->
runOnUiThread { runOnUiThread {
@@ -116,13 +116,34 @@ fun EditText.addOnActionSearchListener(searchCallback: () -> Unit) {
return@setOnEditorActionListener false return@setOnEditorActionListener false
} }
} }
fun View.clickWithDebounce(delay: Long = 500, action: () -> Unit) { //fun View.clickWithDebounce(delay: Long = 500, action: () -> Unit) {
var job: Job? = null // var job: Job? = null
// setOnClickListener {
// job?.cancel()
// job = CoroutineScope(Dispatchers.Main).launch {
// delay(delay)
// action()
// }
// }
//}
/**
* 极简版防重复点击扩展函数
* @param delay 防抖时间(默认300ms
* @param action 点击执行逻辑
*/
fun View.clickWithDebounce(delay: Long = 300, action: () -> Unit) {
setOnClickListener { setOnClickListener {
job?.cancel() // 用View的tag存储是否可点击的状态(默认可点击)
job = CoroutineScope(Dispatchers.Main).launch { if (tag as? Boolean ?: true) {
tag = false // 标记为不可点击
action() // 立即执行点击逻辑
// 启动协程,延迟后恢复可点击状态
CoroutineScope(Dispatchers.Main).launch {
delay(delay) delay(delay)
action() tag = true // 恢复可点击
}
} }
} }
} }
@@ -185,17 +185,17 @@ class UserViewModel : BaseViewModel() {
return@withContext return@withContext
} }
onPageQueryFinished(list) onPageQueryFinished(list)
if (list.size >= pageSize) { // if (list.size >= pageSize) {
lastFaceTimestamp = list.last().faceUpdateTimestamp ?: 0L // lastFaceTimestamp = list.last().faceUpdateTimestamp ?: 0L
getFaceIncrementList( // getFaceIncrementList(
pageNo = pageNo + 1, // pageNo = pageNo + 1,
pageSize = pageSize, // pageSize = pageSize,
timestamp = timestamp, // timestamp = timestamp,
onAllQueryFinished = onAllQueryFinished, // onAllQueryFinished = onAllQueryFinished,
onPageQueryFinished = onPageQueryFinished // onPageQueryFinished = onPageQueryFinished
) // )
return@withContext // return@withContext
} // }
//查询完成所有数据,保存时间戳 //查询完成所有数据,保存时间戳
if (list.isNotEmpty()) { if (list.isNotEmpty()) {
//非空实现最后一条数据的是时间戳,空使用上次list最后一条时间戳 //非空实现最后一条数据的是时间戳,空使用上次list最后一条时间戳
@@ -576,7 +576,7 @@ class UserViewModel : BaseViewModel() {
launchWithLoading { launchWithLoading {
val response = repository.getCollectedFoodVector(param) val response = repository.getCollectedFoodVector(param)
if (parseResponse(response)) { if (parseResponse(response)) {
block(response.data) block(response.data?:emptyList())
} else { } else {
block(null) block(null)
} }
+6 -2
View File
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" <ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:color="#30000000">
<item>
<shape android:shape="rectangle">
<solid android:color="#ff08C6DC" /> <solid android:color="#ff08C6DC" />
<corners android:radius="8dp" /> <corners android:radius="8dp" />
</shape> </shape>
</item>
</ripple>
+6 -6
View File
@@ -35,18 +35,18 @@
android:layout_marginTop="200dp" android:layout_marginTop="200dp"
android:src="@mipmap/img_init" /> android:src="@mipmap/img_init" />
<TextView <androidx.appcompat.widget.AppCompatButton
android:id="@+id/okButton" android:id="@+id/okButton"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="52dp" android:layout_height="80dp"
android:layout_below="@+id/mainImgView" android:layout_below="@+id/mainImgView"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="60dp" android:layout_marginTop="90dp"
android:background="@drawable/bg_init_button" android:background="@drawable/bg_init_button"
android:gravity="center" android:gravity="center"
android:text="连接服务器" android:text="重试"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="22sp" android:textSize="36sp"
android:visibility="gone" android:visibility="gone"
android:textStyle="bold" /> android:textStyle="bold" />
@@ -56,7 +56,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/mainImgView" android:layout_below="@+id/mainImgView"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="160dp" android:layout_marginTop="260dp"
android:padding="10dp" android:padding="10dp"
android:background="@drawable/bg_init_button" android:background="@drawable/bg_init_button"
android:gravity="center" android:gravity="center"