feat(ocr): 添加拍照结果倒计时跳转功能

- 在SprayingOCRActivity中新增CountDownTimer实现10秒后自动跳转到结果页面
- 添加showPhoto方法统一处理照片显示逻辑
- 添加restartResultCountdown方法管理倒计时定时器
- 优化SprayingResultActivity中的图片加载时机
- 更新布局文件调整ImageView尺寸和间距
- 在AndroidManifest.xml中注册SprayingResultActivity并调整设计高度
- 移除不再使用的FileHelper依赖和相关导入包
- 完善倒计时取消机制防止内存泄漏
这个提交包含在:
徐勤民 2026-04-14 21:17:43 +08:00
父节点 afe5eeb017
当前提交 53b5be8ec4
共有 5 个文件被更改,包括 34 次插入14 次删除

查看文件

@ -84,6 +84,9 @@
<activity <activity
android:name=".ui.SprayingOCRActivity" android:name=".ui.SprayingOCRActivity"
android:exported="false" /> android:exported="false" />
<activity
android:name=".ui.SprayingResultActivity"
android:exported="false" />
<activity <activity
android:name=".ui.WelcomeActivity" android:name=".ui.WelcomeActivity"
android:exported="true" android:exported="true"
@ -110,7 +113,7 @@
android:value="480" /> android:value="480" />
<meta-data <meta-data
android:name="design_height_in_dp" android:name="design_height_in_dp"
android:value="600" /> android:value="640" />
</application> </application>
</manifest> </manifest>

查看文件

@ -1,12 +1,12 @@
package com.nova.brain.glass.ui package com.nova.brain.glass.ui
import android.R.attr.path import android.content.Intent
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.os.CountDownTimer
import android.os.Environment import android.os.Environment
import android.view.WindowManager import android.view.WindowManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.nova.brain.glass.R import com.nova.brain.glass.R
import com.nova.brain.glass.databinding.ActivitySprayingBinding
import com.nova.brain.glass.databinding.ActivitySprayingOcrBinding import com.nova.brain.glass.databinding.ActivitySprayingOcrBinding
import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdListener
import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.OfflineCmdServiceHelper
@ -18,7 +18,6 @@ import com.rokid.security.system.server.media.callback.PhotoFileCallback
import com.xuqm.base.adapter.BasePagedAdapter import com.xuqm.base.adapter.BasePagedAdapter
import com.xuqm.base.adapter.CommonPagedAdapter import com.xuqm.base.adapter.CommonPagedAdapter
import com.xuqm.base.adapter.ViewHolder import com.xuqm.base.adapter.ViewHolder
import com.xuqm.base.common.FileHelper
import com.xuqm.base.common.LogHelper import com.xuqm.base.common.LogHelper
import com.xuqm.base.extensions.showMessage import com.xuqm.base.extensions.showMessage
import com.xuqm.base.ui.BaseListFormLayoutNormalActivity import com.xuqm.base.ui.BaseListFormLayoutNormalActivity
@ -59,6 +58,7 @@ class SprayingOCRActivity :
GlassSdk.getGlassMediaService()?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) GlassSdk.getGlassMediaService()?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath)
} }
private val photoCallbackId = UUID.randomUUID().toString() private val photoCallbackId = UUID.randomUUID().toString()
private var resultCountdown: CountDownTimer? = null
private val mPhotoFileCallback = object : PhotoFileCallback.Stub() { private val mPhotoFileCallback = object : PhotoFileCallback.Stub() {
override fun onTakePhoto(path: String) { override fun onTakePhoto(path: String) {
@ -84,7 +84,7 @@ class SprayingOCRActivity :
} else { } else {
runOnUiThread { runOnUiThread {
binding.hint.text = "单击或语音输入“重拍”,可重新拍摄" binding.hint.text = "单击或语音输入“重拍”,可重新拍摄"
binding.content.setImageBitmap(BitmapFactory.decodeFile(path)) showPhoto(path)
} }
} }
} }
@ -97,12 +97,13 @@ class SprayingOCRActivity :
OfflineCmdServiceHelper.addOnLineListener(listener) OfflineCmdServiceHelper.addOnLineListener(listener)
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback) GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
intent.getStringExtra("path")?.apply { intent.getStringExtra("path")?.apply {
binding.content.setImageBitmap(BitmapFactory.decodeFile(this)) showPhoto(this)
} }
} }
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
resultCountdown?.cancel()
OfflineCmdServiceHelper.removeOnLineListener(listener) OfflineCmdServiceHelper.removeOnLineListener(listener)
GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback) GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
} }
@ -126,4 +127,23 @@ class SprayingOCRActivity :
} }
override fun adapter(): BasePagedAdapter<ItemItem> = adapter override fun adapter(): BasePagedAdapter<ItemItem> = adapter
private fun showPhoto(path: String) {
binding.content.setImageBitmap(BitmapFactory.decodeFile(path))
restartResultCountdown(path)
}
private fun restartResultCountdown(path: String) {
resultCountdown?.cancel()
resultCountdown = object : CountDownTimer(10_000, 1_000) {
override fun onTick(millisUntilFinished: Long) {
}
override fun onFinish() {
startActivity(Intent(this@SprayingOCRActivity, SprayingResultActivity::class.java).apply {
putExtra("path", path)
})
}
}.start()
}
} }

查看文件

@ -89,10 +89,6 @@ class SprayingResultActivity :
putExtra("path", path) putExtra("path", path)
}) })
finish() finish()
// runOnUiThread {
// binding.hint.text = "单击或语音输入“开始”,进入下一步"
// binding.iv.setImageBitmap(BitmapFactory.decodeFile(path))
// }
} }
} }
} }
@ -103,15 +99,15 @@ class SprayingResultActivity :
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
OfflineCmdServiceHelper.addOnLineListener(listener) OfflineCmdServiceHelper.addOnLineListener(listener)
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback) GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
intent.getStringExtra("path")?.apply {
binding.iv.setImageBitmap(BitmapFactory.decodeFile(this))
}
} }
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
OfflineCmdServiceHelper.removeOnLineListener(listener) OfflineCmdServiceHelper.removeOnLineListener(listener)
GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback) GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
intent.getStringExtra("path")?.apply {
binding.iv.setImageBitmap(BitmapFactory.decodeFile(this))
}
} }
private var isPhoto = false private var isPhoto = false

查看文件

@ -25,7 +25,7 @@
<ImageView <ImageView
android:layout_width="120dp" android:layout_width="120dp"
android:id="@+id/content" android:id="@+id/content"
android:layout_height="wrap_content" android:layout_height="150dp"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

查看文件

@ -46,6 +46,7 @@
<ImageView <ImageView
android:id="@+id/iv" android:id="@+id/iv"
android:padding="2dp"
android:layout_width="120dp" android:layout_width="120dp"
android:layout_height="150dp" android:layout_height="150dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"