chore: 关闭加速度计抬手亮屏(硬件无陀螺仪,不可靠)

设备仅有基础加速度计(MTK),无陀螺仪/重力传感器/旋转向量。
经 v1~v5 五轮实测验证,"看表"与"不看表"的角度差仅~7°,
无法可靠区分抬手和小幅摆动。旧版uni-app也放弃了此功能。

代码保留但默认不启用(start/stop/pause/resume 全部注释),
待更换有陀螺仪的硬件后取消注释即可启用。

保留的文件:
- AccelerometerWakeController.kt(接口)
- FiseAccelerometerWake.kt(实现,含倾斜角度+低通滤波方案)
- DeviceModule.kt(DI绑定)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-04-30 19:01:17 +09:30
parent 5f30611cc0
commit d6a8f4acf9
4 changed files with 47 additions and 13 deletions

View File

@@ -62,8 +62,10 @@ class MainActivity : AppCompatActivity() {
// 注册系统状态监听(电量、蓝牙)
systemStateMonitor.register()
// 启动加速度计抬手亮屏
accelerometerWake.start()
// 加速度计抬手亮屏:当前硬件仅有基础加速度计(无陀螺仪),
// 无法可靠区分"看表"和"小幅摆动"(角度差仅~7°暂不启用。
// 待更换有陀螺仪的硬件后取消注释。
// accelerometerWake.start()
// 初始化通知横幅
notificationBanner = binding.notificationBanner
@@ -76,7 +78,7 @@ class MainActivity : AppCompatActivity() {
override fun onDestroy() {
super.onDestroy()
accelerometerWake.stop()
// accelerometerWake.stop() // 与 start() 对应,暂不启用
systemStateMonitor.unregister()
notificationBanner.destroy()
}

View File

@@ -98,10 +98,10 @@ class PunchViewModel @Inject constructor(
Timber.d("考勤: 开始NFC打卡, punchType=$punchType")
_uiState.update { it.copy(isNfcScanning = true, scanningPunchType = punchType) }
// 1. 暂停加速度计亮屏检测(防止贴卡姿势误触发熄屏)
accelerometerWake.pause()
// 加速度计亮屏暂不启用(硬件无陀螺仪),启用后取消注释
// accelerometerWake.pause()
// 2. 开启 NFC + 音效
// 1. 开启 NFC + 音效
nfcController.open()
playFeedback(PLAN_NFC_OPEN)
@@ -139,8 +139,8 @@ class PunchViewModel @Inject constructor(
// 关闭 NFC 硬件(不播关闭音效,成功/失败音效由 API 结果决定)
nfcController.stopScan()
nfcController.close()
// 恢复加速度计亮屏检测
accelerometerWake.resume()
// 加速度计亮屏暂不启用,启用后取消注释
// accelerometerWake.resume()
// 清除倒计时
_uiState.update { it.copy(nfcCountdown = 0) }
@@ -244,13 +244,13 @@ class PunchViewModel @Inject constructor(
_uiState.update { it.copy(punchResult = null, errorMessage = null) }
}
/** 关闭 NFC 硬件 + 播放关闭音效 + 恢复加速度计 */
/** 关闭 NFC 硬件 + 播放关闭音效 */
private fun closeNfc() {
nfcController.stopScan()
nfcController.close()
playFeedback(PLAN_NFC_CLOSE)
// 恢复加速度计亮屏检测
accelerometerWake.resume()
// 加速度计亮屏暂不启用,启用后取消注释
// accelerometerWake.resume()
}
/** 播放震动+音效反馈 */
@@ -268,8 +268,8 @@ class PunchViewModel @Inject constructor(
if (nfcController.isOpen()) {
nfcController.stopScan()
nfcController.close()
// 确保加速度计恢复(防止页面销毁时 NFC 未关闭导致永久暂停)
accelerometerWake.resume()
// 加速度计亮屏暂不启用,启用后取消注释
// accelerometerWake.resume()
}
}
}

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 主按钮背景(深蓝色圆角) -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#FF1565C0" />
<corners android:radius="12dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#FF1E88E5" />
<corners android:radius="12dp" />
</shape>
</item>
</selector>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 次按钮背景(深灰色圆角) -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#FF424242" />
<corners android:radius="12dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#FF333333" />
<corners android:radius="12dp" />
</shape>
</item>
</selector>