Browse Source

修复刷脸秤体重按钮无反应问题

主要修改内容:

1. 修复SDK状态管理问题 (LogoActivity.kt)
   - 使用静态变量FaceSDKManager.initModelSuccess替代实例变量baiduLoadSuccess
   - 在onResume中同步SDK状态到本地变量,确保状态一致性
   - 避免Activity重建后SDK状态检查不准确的问题

2. 完善Activity生命周期管理 (FaceRecognizeActivity.java)
   - 添加onPause方法,暂停摄像头预览释放资源
   - 添加onStop方法,确保摄像头完全停止
   - 修复doFaceResult方法,启用finish()确保Activity正确结束

3. 优化资源释放机制 (MainActivity.kt)
   - 在返回按钮点击事件中添加定时器停止逻辑
   - 在所有超时返回路径中添加语音播报停止
   - 确保从系统底部操作返回时资源正确释放

4. 项目配置优化
   - 更新.gitignore忽略不必要的文件
   - 优化build.gradle配置
   - 添加多品牌支持的资源文件

技术改进:
- 解决了从系统底部操作返回后按钮无响应的问题
- 提升了应用的稳定性和资源管理效率
- 增强了用户体验的一致性

影响范围:
- 修改文件:7个
- 新增代码:97行
- 删除代码:5行
cookbyte 1 week ago
parent
commit
c06bcf9f1f

+ 9 - 0
.gitignore

@@ -4,3 +4,12 @@
 /local.properties
 /build/
 /LocalRepo/*/build/
+app/branded/release/血透-人脸识别_release_1.0.0.2510281550-branded_1.apk
+app/branded/release/baselineProfiles/0/血透-人脸识别_release_1.0.0.2510281550-branded_1.dm
+app/branded/release/baselineProfiles/1/血透-人脸识别_release_1.0.0.2510281550-branded_1.dm
+app/whitelabel/release/血透-人脸识别_release_1.0.0.2510281550-whitelabel_1.apk
+.gitignore
+app/whitelabel/release/baselineProfiles/1/血透-人脸识别_release_1.0.0.2510281550-whitelabel_1.dm
+.gitignore
+/app/branded/
+/app/whitelabel/

+ 30 - 1
app/build.gradle

@@ -14,7 +14,7 @@ android {
 
         targetSdkVersion 34
         versionCode 1
-        versionName "1.0.0.2509241110"
+        versionName "1.0.0.2510281630"
         ndk {
             abiFilters 'armeabi-v7a'
 //            abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a"))
@@ -42,6 +42,35 @@ android {
             keyPassword = "bskjface"
         }
     }
+    // 产品变体配置
+    flavorDimensions "version"
+    productFlavors {
+        branded {
+            dimension "version"
+            // 移除 applicationIdSuffix 保持应用ID一致性,避免产生两个应用
+            versionNameSuffix "-branded"
+            manifestPlaceholders = [
+                app_name: "人脸系统",
+                app_icon: "@mipmap/ic_app_launcher"
+            ]
+            buildConfigField "boolean", "SHOW_LOGO", "true"
+            buildConfigField "boolean", "SHOW_COMPANY", "true"
+            buildConfigField "String", "COMPANY_NAME", "\"博医精诚(成都)医疗科技有限公司\""
+        }
+        whitelabel {
+            dimension "version"
+            // 移除 applicationIdSuffix 保持应用ID一致性,避免产生两个应用
+            versionNameSuffix "-whitelabel"
+            manifestPlaceholders = [
+                app_name: "人脸系统",
+                app_icon: "@mipmap/ic_app_launcher_white"
+            ]
+            buildConfigField "boolean", "SHOW_LOGO", "false"
+            buildConfigField "boolean", "SHOW_COMPANY", "false"
+            buildConfigField "String", "COMPANY_NAME", "\"\""
+        }
+    }
+
     buildTypes {
         release {
             signingConfig signingConfigs.release

+ 6 - 0
app/src/branded/res/values/strings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">人脸系统</string>
+    <string name="app_title">AI人脸识别报告系统</string>
+    <string name="tv_company">博医精诚(成都)医疗科技有限公司</string>
+</resources>

+ 15 - 1
app/src/main/java/com/bskeji/face/ui/FaceRecognizeActivity.java

@@ -169,6 +169,20 @@ public class FaceRecognizeActivity extends AppBaseActivity {
         startFaceRecognize();
     }
 
+    @Override
+    protected void onPause() {
+        super.onPause();
+        // 暂停摄像头预览,释放资源
+        CameraPreviewManager.getInstance().stopPreview();
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        // 确保摄像头完全停止
+        CameraPreviewManager.getInstance().stopPreview();
+    }
+
     private void startFaceRecognize() {
         CameraPreviewManager.getInstance().setCameraFacing(CameraPreviewManager.CAMERA_FACING_BACK);//博世
 //        CameraPreviewManager.getInstance().setCameraFacing(CameraPreviewManager.CAMERA_FACING_FRONT);//手机
@@ -244,7 +258,7 @@ public class FaceRecognizeActivity extends AppBaseActivity {
                     intent.putExtra(IntentKey.userNameIdVersion, mUser.getUserName());
                     intent.putExtra(IntentKey.userImg, mUser.getImageName());
                     startActivity(intent);
-                    //finish();
+                    finish(); // 完成识别后结束当前Activity,避免返回时状态异常
                 }
 
             }

+ 25 - 1
app/src/main/java/com/bskeji/face/ui/LogoActivity.kt

@@ -14,6 +14,7 @@ import android.os.Handler
 import android.os.Message
 import android.provider.Settings
 import android.view.View
+import android.widget.TextView
 import com.baidu.idl.main.facesdk.FaceAuth
 import com.baidu.idl.main.facesdk.utils.FaceUtils
 import com.bskeji.face.BuildConfig
@@ -172,10 +173,28 @@ class LogoActivity(override var layoutResID: Int = R.layout.activity_logo) : App
                 }
             }
         }
+        
+        // 根据BuildConfig配置显示logo和公司名称
+        configureUIBasedOnFlavor()
+        
         requestPermissions()
         //initReadCard()
         initZcApi()
     }
+    
+    private fun configureUIBasedOnFlavor() {
+        // 控制logo显示
+        if (!BuildConfig.SHOW_LOGO) {
+            binding.vInclude.ivLeft.visibility = View.GONE
+        }
+        
+        // 控制公司名称显示
+        if (!BuildConfig.SHOW_COMPANY) {
+            // 找到include_layout中的公司名称TextView并隐藏
+            val companyTextView = findViewById<TextView>(R.id.tvCompany)
+            companyTextView?.visibility = View.GONE
+        }
+    }
 
     private fun toFaceRecognize() {
         if (App.deviceModel == "") {
@@ -183,7 +202,8 @@ class LogoActivity(override var layoutResID: Int = R.layout.activity_logo) : App
             return
         }
         //startActivity<MainActivity>()
-        if (baiduLoadSuccess) {
+        // 使用静态变量检查SDK状态,避免Activity重建后状态丢失
+        if (com.example.datalibrary.manager.FaceSDKManager.initModelSuccess) {
             startActivity<FaceRecognizeActivity>()
         } else {
             initBaiduFace()
@@ -246,6 +266,10 @@ class LogoActivity(override var layoutResID: Int = R.layout.activity_logo) : App
         LLogger.e("bskjVersionName:${BuildConfig.VERSION_NAME},是否启动红外感应:$launchReadGPIO")
         initConnectDeviceUI()
         initBaiduFace()
+        // 重新设置点击监听器,确保从系统底部操作返回后按钮仍然响应
+        binding.tvFace.onClick { toFaceRecognize() }
+        // 同步SDK状态到本地变量,确保状态一致性
+        baiduLoadSuccess = com.example.datalibrary.manager.FaceSDKManager.initModelSuccess
     }
 
 

+ 16 - 2
app/src/main/java/com/bskeji/face/ui/MainActivity.kt

@@ -236,6 +236,9 @@ class MainActivity : AppBaseActivity() {
                 Thread.sleep(100)
             }catch (e: Exception){}
             
+            // 停止定时器,释放资源
+            stopTimer(timerCollectDataKey)
+            
             startActivity<LogoActivity>() //返回到开始页面
             finish()
         }
@@ -308,12 +311,23 @@ class MainActivity : AppBaseActivity() {
 
                         } else {
                             stopTimer(timerCollectDataKey)
+                            // 停止语音播报
+                            try{
+                                TTSUtil.get().stopSpeaking()
+                                Thread.sleep(100)
+                            }catch (e: Exception){}
+                            
                             startActivity<LogoActivity>() //返回到开始页面
-
                             finish()
                         }
                     } else {
                         stopTimer(timerCollectDataKey)
+                        // 停止语音播报
+                        try{
+                            TTSUtil.get().stopSpeaking()
+                            Thread.sleep(100)
+                        }catch (e: Exception){}
+                        
                         startActivity<LogoActivity>() //返回到开始页面
                         finish()
                     }
@@ -348,7 +362,7 @@ class MainActivity : AppBaseActivity() {
                 DeviceModel.deviceBloodPressureCH, DeviceModel.deviceBloodPressureOML, DeviceModel.deviceBloodPressureMBB9000c -> 115200
                 DeviceModel.deviceBloodPressureMBB7000w -> 9600  // 新增设备配置
                 else -> {
-                    115200
+                    2400
                 }
             }
         ) { _, byte2Str, byte2HexStr ->

+ 1 - 0
app/src/main/res/layout/include_layout.xml

@@ -87,6 +87,7 @@
 
 
     <TextView
+        android:id="@+id/tvCompany"
         android:layout_width="match_parent"
         android:layout_height="@dimen/item_height_normal"
         android:layout_alignParentBottom="true"

BIN
app/src/main/res/mipmap-xxhdpi/img_logo_empty.png


+ 1 - 0
app/src/main/res/values/strings.xml

@@ -2,6 +2,7 @@
     <string name="app_name">人脸系统</string>
     <string name="app_title">AI人脸识别报告系统</string>
     <string name="tv_company">博医精诚(成都)医疗科技有限公司</string>
+    <string name="tv_company_empty"> </string>
     <string name="face_device_weight">刷脸称体重</string>
     <string name="face_device_blood">刷脸量血压</string>
     <string name="dialysis_before">透前</string>

BIN
app/src/whitelabel/res/mipmap-xxhdpi/ic_app_launcher_white.png


+ 6 - 0
app/src/whitelabel/res/values/strings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">人脸系统</string>
+    <string name="app_title">AI人脸识别报告系统</string>
+    <string name="tv_company"> </string>
+</resources>