精简了称sdk调用

This commit is contained in:
zxj
2025-08-06 14:45:07 +08:00
parent bbf2e605b5
commit 08611349aa
15 changed files with 545 additions and 101 deletions
@@ -6,6 +6,7 @@ import android.graphics.Typeface
import android.hardware.display.DisplayManager
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.view.ViewOutlineProvider
import android.widget.AdapterView
@@ -36,7 +37,6 @@ import com.sw.dualscreen.sdk.SensorScaleUtils
import com.sw.dualscreen.utils.GlideUtils
import com.sw.dualscreen.view.CustomBottomSheetDialog
import com.sw.dualscreen.viewmodel.UserViewModel
import com.sw.plate.utils.AppUtil
import com.sw.plate.utils.ToastUtils
import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel
import kotlinx.coroutines.launch
@@ -56,6 +56,8 @@ class MainActivity : AppCompatActivity() {
private var imageAnalysis: ImageAnalysis? = null
private var cameraProviderFuture: ListenableFuture<ProcessCameraProvider>? = null
private var canIdentify: Boolean = false
private var bottomSheetDialog: CustomBottomSheetDialog? = null
private var lastWeight: Double = 0.0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -63,7 +65,6 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.main)
Timber.d("UDID = ${AppUtil.getUDID(this)}")
initView()
setupSecondaryDisplay()
setupCamera()
@@ -84,10 +85,10 @@ class MainActivity : AppCompatActivity() {
}
binding.previewView.clipToOutline = true
binding.tvToSearch.setOnClickListener {
val bottomSheetDialog = CustomBottomSheetDialog.newInstance(viewModel) {
bottomSheetDialog = CustomBottomSheetDialog.newInstance(viewModel) {
updateCurrentFood(it)
}
bottomSheetDialog.show(supportFragmentManager, "CustomBottomSheetDialog")
bottomSheetDialog!!.show(supportFragmentManager, "CustomBottomSheetDialog")
}
val spinnerAdapter = ArrayAdapter<String>(
@@ -138,7 +139,15 @@ class MainActivity : AppCompatActivity() {
binding.tvFoodName.text = foodInfo.foodName
binding.previewView.visibility = View.GONE
binding.ivImg.visibility = View.VISIBLE
GlideUtils.loadRoundCornerImage(this, foodInfo.imgUrl, binding.ivImg, 12)
val imgUrl = foodInfo.imgUrl
if (TextUtils.isEmpty(imgUrl)) {
takePhoto { imgUri ->
GlideUtils.loadRoundCornerImage(this, imgUri, binding.ivImg, 12)
presentation.updateFood(foodInfo.copy(imgUrl = imgUri.toString()))
}
} else {
GlideUtils.loadRoundCornerImage(this, foodInfo.imgUrl, binding.ivImg, 12)
}
pauseAnalysis()
} else {
binding.tvFoodName.text = "-"
@@ -158,7 +167,8 @@ class MainActivity : AppCompatActivity() {
}
}
SensorScaleUtils.startScale { weight ->
// Timber.d("weight = $weight")
Timber.d("registerDataChange weight = $weight")
presentation.updateWeight(weight)
if (weight > 0.0) {
if (canIdentify) {
canIdentify = false
@@ -290,23 +300,30 @@ class MainActivity : AppCompatActivity() {
// 拍照功能
private fun takePhoto(callback: (Uri) -> Unit) {
Timber.d("takePhoto")
// 临时停止分析以避免干扰
isAnalyzing = false
// 创建输出选项
val outputFileOptions = ImageCapture.OutputFileOptions.Builder(
File(
cacheDir.path, "IMG_${System.currentTimeMillis()}.jpg"
)
).build()
val executor = ContextCompat.getMainExecutor(this)
val cacheDir = cacheDir
val photoFile = File.createTempFile(
"IMG_${System.currentTimeMillis()}",
".jpg",
cacheDir
)
val cacheOutputOptions =
ImageCapture.OutputFileOptions.Builder(photoFile).build()
// 执行拍照
imageCapture?.takePicture(
outputFileOptions,
cacheOutputOptions,
executor,
object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
runOnUiThread {
val savedUri = outputFileResults.savedUri
Timber.d("takePhoto savedUri = $savedUri")
ToastUtils.showToast("照片保存成功: $savedUri")
if (savedUri != null) {
callback(savedUri)
@@ -347,6 +364,7 @@ class MainActivity : AppCompatActivity() {
presentation.setStepChangeCallback { step ->
if (step == 1) {
updateCurrentFood(null)
bottomSheetDialog?.dismiss()
}
}
presentation.show()