feat: 新增语音记录饮食功能与开发者调试模块

- 集成 @react-native-voice/voice 实现中文语音识别,支持“一句话记录”餐食
- 新增语音录制页面,含波形动画、音量反馈与识别结果确认
- FloatingFoodOverlay 新增语音入口,打通拍照/库/语音三种记录方式
- 添加麦克风与语音识别权限描述(iOS Info.plist 与 Android manifest)
- 实现开发者模式:连续三次点击用户名激活,含日志查看、导出与清除
- 新增 logger 工具类,统一日志存储(AsyncStorage)与按级别输出
- 重构 BackgroundTaskManager 为单例并支持 Promise 初始化,避免重复注册
- 移除 sleep-detail 多余渐变背景,改用 ThemedView 统一主题
- 新增通用 haptic 反馈函数,支持多种震动类型(iOS only)
- 升级 expo-background-task、expo-notifications、expo-task-manager 至兼容版本
This commit is contained in:
richarjiang
2025-09-11 19:11:09 +08:00
parent 35d6b74451
commit 3a4a55b78e
17 changed files with 1427 additions and 75 deletions

View File

@@ -40,7 +40,7 @@ PODS:
- ExpoModulesCore
- ExpoAsset (11.1.7):
- ExpoModulesCore
- ExpoBackgroundTask (0.2.8):
- ExpoBackgroundTask (1.0.6):
- ExpoModulesCore
- ExpoBlur (14.1.5):
- ExpoModulesCore
@@ -104,7 +104,7 @@ PODS:
- ExpoModulesCore
- ExpoWebBrowser (14.2.0):
- ExpoModulesCore
- EXTaskManager (13.1.6):
- EXTaskManager (14.0.6):
- ExpoModulesCore
- UMAppLoader
- fast_float (6.1.4)
@@ -1425,6 +1425,8 @@ PODS:
- React-Core
- react-native-safe-area-context (5.4.0):
- React-Core
- react-native-voice (3.2.4):
- React-Core
- react-native-webview (13.13.5):
- DoubleConversion
- glog
@@ -1987,7 +1989,7 @@ PODS:
- SDWebImage/Core (~> 5.17)
- Sentry/HybridSDK (8.53.2)
- SocketRocket (0.7.1)
- UMAppLoader (5.1.3)
- UMAppLoader (6.0.6)
- Yoga (0.0.0)
- ZXingObjC/Core (3.6.9)
- ZXingObjC/OneD (3.6.9):
@@ -2065,6 +2067,7 @@ DEPENDENCIES:
- react-native-cos-sdk (from `../node_modules/react-native-cos-sdk`)
- react-native-render-html (from `../node_modules/react-native-render-html`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- "react-native-voice (from `../node_modules/@react-native-voice/voice`)"
- react-native-webview (from `../node_modules/react-native-webview`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`)
@@ -2266,6 +2269,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-render-html"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-voice:
:path: "../node_modules/@react-native-voice/voice"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-NativeModulesApple:
@@ -2369,7 +2374,7 @@ SPEC CHECKSUMS:
Expo: c9e30ab79606b3800733594a961528bc4abb0ffe
ExpoAppleAuthentication: 4d2e0c88a4463229760f1fbb9a937a810efb6863
ExpoAsset: ef06e880126c375f580d4923fdd1cdf4ee6ee7d6
ExpoBackgroundTask: 6c1990438e45b5c4bbbc7d75aa6b688d53602fe8
ExpoBackgroundTask: f4dac8f09f3b187e464af7a1088d9fd5ae48a836
ExpoBlur: 3c8885b9bf9eef4309041ec87adec48b5f1986a9
ExpoCamera: e1879906d41184e84b57d7643119f8509414e318
ExpoFileSystem: 7f92f7be2f5c5ed40a7c9efc8fa30821181d9d63
@@ -2387,7 +2392,7 @@ SPEC CHECKSUMS:
ExpoSymbols: c5612a90fb9179cdaebcd19bea9d8c69e5d3b859
ExpoSystemUI: 433a971503b99020318518ed30a58204288bab2d
ExpoWebBrowser: dc39a88485f007e61a3dff05d6a75f22ab4a2e92
EXTaskManager: 280143f6d8e596f28739d74bf34910300dcbd4ea
EXTaskManager: eedcd03c1a574c47d3f48d83d4e4659b3c1fa29b
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: d2a9cd223302b6c9aa4aa34c1a775e9db609eb52
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
@@ -2435,6 +2440,7 @@ SPEC CHECKSUMS:
react-native-cos-sdk: a29ad87f60e2edb2adc46da634aa5b6e7cd14e35
react-native-render-html: 5afc4751f1a98621b3009432ef84c47019dcb2bd
react-native-safe-area-context: 9d72abf6d8473da73033b597090a80b709c0b2f1
react-native-voice: 908a0eba96c8c3d643e4f98b7232c6557d0a6f9c
react-native-webview: 3df1192782174d1bd23f6a0f5a4fec3cdcca9954
React-NativeModulesApple: 494c38599b82392ed14b2c0118fca162425bb618
React-oscompat: 0592889a9fcf0eacb205532028e4a364e22907dd
@@ -2486,7 +2492,7 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380
Sentry: 59993bffde4a1ac297ba6d268dc4bbce068d7c1b
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
UMAppLoader: 55159b69750129faa7a51c493cb8ea55a7b64eb9
UMAppLoader: 2af2cc05fcaa9851233893c0e3dbc56a99f57e36
Yoga: adb397651e1c00672c12e9495babca70777e411e
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5

View File

@@ -63,6 +63,10 @@
<string>应用需要访问相册以选择您的体态照片用于AI测评。</string>
<key>NSUserNotificationsUsageDescription</key>
<string>应用需要发送通知以提醒您喝水和站立活动。</string>
<key>NSMicrophoneUsageDescription</key>
<string>应用需要使用麦克风进行语音识别,将您的语音转换为文字记录饮食信息。</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>应用需要使用语音识别功能来转换您的语音为文字,帮助您快速记录饮食信息。</string>
<key>NSUserActivityTypes</key>
<array>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>