# YX_Voice 详细设计文档 ## 1. 概述 ### 1.1 项目简介 YX_Voice 是车载语音助手服务模块,作为第三方语音助手(同行者TXZ)与车载各功能模块之间的桥梁,负责语音指令的分发、处理以及车辆状态的同步。 ### 1.2 项目信息 - **包名**: `com.yaxon.voice` - **应用类型**: Android System Application - **进程类型**: 系统持久化进程 (`persistent=true`) - **共享UID**: `android.uid.system` ### 1.3 主要功能 1. 语音指令接收与分发 2. 车辆控制(空调、车窗、灯光等) 3. 媒体播放控制 4. 系统设置控制 5. 蓝牙电话控制 6. 车辆状态同步 --- ## 2. 架构设计 ### 2.1 整体架构图 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ YX_Voice 架构图 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ TXZ协议 ┌──────────────────────────────┐ │ │ │ TXZ语音 │◄────────────►│ VoiceService │ │ │ │ 助手模块 │ │ (服务入口 & TXZ连接管理) │ │ │ └──────────────┘ └──────────────┬───────────────┘ │ │ │ │ │ ┌──────────────────────────┼────────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────┐│ │ │ ProtocolManager │ │ VoiceManager │ │ Helpers ││ │ │ (协议分发管理) │ │ (核心状态管理) │ │ (辅助类) ││ │ └──────────┬───────────┘ └──────────┬───────────┘ └──────────┘│ │ │ │ │ │ ▼ ▼ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ Protocol Implementations │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │ │ │ │ │ Voice │ │ Air │ │ Setting │ │ Media │ │ Car │ │ │ │ │ │Protocol │ │Protocol │ │Protocol │ │Protocol │ │Control │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └────────┘ │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ IPC Communication Layer │ │ │ │ YxIPC (跨进程通信框架) │ │ │ └──────────────────────────┬───────────────────────────────────┘ │ │ │ │ │ ┌───────────────────────┼───────────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 音乐 │ │ 设置 │ │ 空调 │ │ │ │ 模块 │ │ 模块 │ │ 模块 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ ``` ### 2.2 模块分层 | 层级 | 模块 | 职责 | |------|------|------| | 应用层 | VoiceService | 服务入口、生命周期管理 | | 核心层 | ProtocolManager, VoiceManager | 协议分发、状态管理 | | 协议层 | BaseProtocol及子类 | 具体协议解析与执行 | | 辅助层 | Helpers, Receivers, Observers | 状态监听、辅助功能 | | 通信层 | YxIPC, TxzProtocolManager | 跨进程通信 | --- ## 3. 核心模块详细设计 ### 3.1 应用入口 (YxApplication) **文件路径**: `com/yaxon/voice/YxApplication.java` **职责**: - 继承 `AutoMotiveSDKApplication`,提供车载SDK上下文 - 初始化IPC通信框架 - 初始化崩溃处理机制 - 启动语音服务 **关键代码流程**: ``` onCreate() ├── ToolInit.init() // 工具类初始化 ├── CrashExceptionHandler // 崩溃处理 ├── YxIPC.bind() // IPC绑定 │ └── ProtocolManager // 设置消息监听 ├── PackagePermissionManager // 权限管理 └── startVoiceService() // 启动服务 ``` ### 3.2 语音服务 (VoiceService) **文件路径**: `com/yaxon/voice/service/VoiceService.java` **继承关系**: `VoiceService extends BaseVoiceService implements ConnectionListener` **职责**: - 与TXZ语音助手建立连接 - 接收并分发语音指令 - 管理各模块监听器生命周期 **初始化流程**: ``` onCreate() ├── initTxz() // 初始化TXZ连接 │ ├── TxzProtocolManager.initialize() │ ├── TxzProtocolManager.connect() │ └── addConnectionListener() ├── registerTxzCommandReceiver() // 注册指令接收器 ├── BlueToothHelper.register() // 蓝牙监听 ├── VoiceManager.registerCallbacks() // 车辆状态监听 └── 注册各种Receiver和Callback ``` **TXZ指令处理流程**: ``` TXZ语音指令 │ ▼ TxzProtocolManager.setDefaultHandler() │ ├── 解析 commandType (协议名称) ├── 解析 Bundle 参数 ├── 转换为JSON格式 │ ▼ ProtocolManager.onResponse() │ ▼ YxProtocolHandler.onHandleProtocol() │ ▼ 具体Protocol实现类.onProtocolLogic() ``` ### 3.3 协议管理器 (ProtocolManager) **文件路径**: `com/yaxon/voice/core/ProtocolManager.java` **设计模式**: 单例模式 **职责**: - 实现IPC消息监听接口 (`MessageListener`, `RemoteListener`) - 将消息分发给协议处理器 **类图**: ``` ┌─────────────────────────────────┐ │ ProtocolManager │ ├─────────────────────────────────┤ │ - sInstance: ProtocolManager │ │ - mProtocolHandler: IProtocolHandler │ ├─────────────────────────────────┤ │ + getInstance() │ │ + setProtocolHandler() │ │ + onResponse() │ ← MessageListener │ + onBindRemote() │ ← RemoteListener │ + release() │ └─────────────────────────────────┘ ``` ### 3.4 协议处理器 (YxProtocolHandler) **文件路径**: `com/yaxon/voice/core/YxProtocolHandler.java` **职责**: - 维护包名到协议逻辑类的映射 - 在后台线程处理协议分发 **协议映射表**: ```java protocolLogicMap.put(CAR_CAR_CONTROL_PKG, new CarControlProtocol()); // 车辆控制 protocolLogicMap.put(TXZ_PKG_NEW, new VoiceProtocol()); // 语音协议 protocolLogicMap.put(AIR_PKG, new AirProtocol()); // 空调协议 protocolLogicMap.put(BLUETOOTH_PKG, new BluetoothProtocol()); // 蓝牙协议 protocolLogicMap.put(MUSIC_PKG, new MediaProtocol()); // 媒体协议 protocolLogicMap.put(VIDEO_PKG, new MediaProtocol()); // 视频协议 protocolLogicMap.put(PHOTO_PKG, new MediaProtocol()); // 图库协议 protocolLogicMap.put(RADIO_PKG, new MediaProtocol()); // 收音机协议 protocolLogicMap.put(YX_VOICE_PKG, new YxProtocol()); // 内部协议 protocolLogicMap.put(SETTING_PKG, new SettingProtocol()); // 设置协议 protocolLogicMap.put(SYSTEM_UI_PKG, new SystemUIProtocol()); // 系统UI协议 protocolLogicMap.put(FACTORY_PKG, new FactoryProtocol()); // 工厂模式协议 protocolLogicMap.put(AVM_PKG, new AvmProtocol()); // 360环视协议 protocolLogicMap.put(DVR_PKG, new DvrProtocol()); // 行车记录仪协议 ``` ### 3.5 语音管理器 (VoiceManager) **文件路径**: `com/yaxon/voice/core/VoiceManager.java` **设计模式**: 单例模式 **职责**: - 管理TXZ绑定状态 - 管理AVM/DVR前台状态 - 注册车辆状态回调(空调、设置、智能驾驶) - 提供AudioTrackPlayer实例 **状态管理**: ```java private boolean isVoiceBind; // TXZ绑定状态 private AtomicBoolean isAvm; // AVM前台状态 private AtomicBoolean isDvr; // DVR前台状态 ``` ### 3.6 语音事件助手 (VoiceEventHelper) **文件路径**: `com/yaxon/voice/helper/VoiceEventHelper.java` **职责**: - 封装所有语音控制操作 - 与各模块进行IPC通信 - 通知TXZ状态变化 **主要功能分类**: | 类别 | 方法示例 | 说明 | |------|----------|------| | 空调控制 | sendAirSwitch, sendAcSwitch, sendAirTempTo | 温度、风速、模式控制 | | 音量控制 | sendVolumeTo, sendVolumeMute, sendVolumeElevator | 音量调节、静音 | | 屏幕控制 | setMpuBrightnessLevel, sendScreenOff, sendScreenClean | 亮度、熄屏、清洁 | | 系统设置 | switchSystemLanguage, switchDistanceUnit | 语言、单位切换 | | 车窗控制 | sendWindowSwitch, sendWindowPercent | 开关、百分比控制 | | 语音设置 | sendSwitchVoiceWakeup, customWakeupWord, switchVoiceMan | 唤醒词、发音人设置 | --- ## 4. 协议设计 ### 4.1 协议接口定义 **IProtocolHandler (协议处理接口)**: ```java public interface IProtocolHandler { void onHandleProtocol(long msgSendTime, String remoteName, Bundle data); } ``` **IProtocolLogic (协议逻辑接口)**: ```java public interface IProtocolLogic { void onProtocolLogic(Bundle data); } ``` ### 4.2 协议基类 (BaseProtocol) ```java public abstract class BaseProtocol implements IProtocolLogic { @Override public void onProtocolLogic(Bundle data) { String cmd = data.getString(VoiceConst.PARAMS_CMD_KEY, ""); switch (cmd) { case CMD_SWITCH_TXZ_WINDOW: // 切换TXZ窗口 case CMD_PLAY_TTS: // 播放TTS default: onProtocolParse(data); // 子类实现具体解析 } } protected abstract void onProtocolParse(Bundle data); } ``` ### 4.3 TXZ协议常量定义 协议命令类型(部分): #### 车辆控制类 | 命令常量 | 命令名称 | 说明 | |----------|----------|------| | CMD_OPEN_SUNROOF | openSunroof | 打开天窗 | | CMD_CLOSE_SUNROOF | closeSunroof | 关闭天窗 | | CMD_OPEN_WINDOW | openWindow | 打开车窗 | | CMD_CLOSE_WINDOW | closeWindow | 关闭车窗 | | CMD_OPEN_MIRROR_HEAT | openMirrorHeat | 打开后视镜加热 | | CMD_OPEN_AVM | openAvm | 打开360环视 | #### 空调控制类 | 命令常量 | 命令名称 | 说明 | |----------|----------|------| | CMD_OPEN_AC | openAc | 打开空调 | | CMD_CLOSE_AC | closeAc | 关闭空调 | | CMD_SET_AC_WIND_SPEED_LEVEL | setAcWindSpeedLevel | 设置风速档位 | | CMD_SET_AC_TEMP_VALUE | setAcTempValue | 设置温度 | #### 系统设置类 | 命令常量 | 命令名称 | 说明 | |----------|----------|------| | CMD_OPEN_BLUETOOTH | openBluetooth | 打开蓝牙 | | CMD_OPEN_WIFI | openWifi | 打开WiFi | | CMD_SET_VOLUME_TO_VALUE | setVolumeToValue | 设置音量 | | CMD_SET_SCREEN_BRIGHTNESS_VALUE | setScreenBrightnessValue | 设置亮度 | | CMD_SWITCH_VOICE_WAKEUP | switchVoicewakeup | 语音唤醒开关 | | CMD_CUSTOM_WAKE_UP_WORD | customWakeupWord | 自定义唤醒词 | #### 媒体控制类 | 命令常量 | 命令名称 | 说明 | |----------|----------|------| | CMD_PLAY_PAUSE | playPause | 暂停播放 | | CMD_PLAY_RESUME | playResume | 继续播放 | | CMD_PLAY_PREV | playPrev | 上一首 | | CMD_PLAY_NEXT | playNext | 下一首 | | CMD_OPEN_APP | openApp | 打开应用 | --- ## 5. 模块间通信设计 ### 5.1 IPC通信架构 YX_Voice 使用 `YxIPC` 框架进行跨进程通信: ``` ┌─────────────────┐ YxIPC ┌─────────────────┐ │ YX_Voice │◄──────────────►│ YX_Music │ │ (Server) │ │ (Client) │ └────────┬────────┘ └─────────────────┘ │ │ YxIPC ▼ ┌─────────────────┐ │ YX_Setting │ └─────────────────┘ ``` **IPC配置**: ```java YxIpcConfig yxIpcConfig = new YxIpcConfig(); yxIpcConfig.addRemoteStartService(PackageConst.MUSIC_PKG); yxIpcConfig.addRemoteStartService(PackageConst.SETTING_PKG); yxIpcConfig.setRemoteListener(ProtocolManager.getInstance()); YxIPC.getInstance().bind(this, yxIpcConfig); ``` ### 5.2 TXZ协议通信 TXZ语音助手使用自定义协议框架: ``` ┌─────────────────┐ TxzProtocolManager ┌─────────────────┐ │ YX_Voice │◄─────────────────────►│ TXZ语音助手 │ │ (ConnectionService) │ (AIDL Service) │ └─────────────────┘ └─────────────────┘ ``` **连接流程**: ```java TxzProtocolManager.initialize(this); TxzProtocolManager.connect(PackageConst.TXZ_PKG_NEW); TxzProtocolManager.getConnection(PackageConst.TXZ_PKG_NEW).addConnectionListener(this); ``` ### 5.3 消息格式 **Bundle格式**: ```java Bundle bundle = new Bundle(); bundle.putString(VoiceConst.PARAMS_CMD_KEY, "命令类型"); bundle.putInt(VoiceConst.PARAMS_NUM_KEY, 数值); bundle.putBoolean(VoiceConst.PARAMS_SWITCH_KEY, 开关状态); bundle.putString(VoiceConst.PARAMS_TYPE_KEY, "类型"); ``` --- ## 6. 接收器与观察者 ### 6.1 BroadcastReceiver | 类名 | 监听Action | 功能 | |------|------------|------| | BootReceiver | ACTION_BOOT_COMPLETED | 开机启动服务 | | PowerReceiver | ACTION_SCREEN_ON/OFF | 屏幕亮灭监听 | | NetworkChangedReceiver | WIFI_STATE_CHANGED | WiFi状态变化 | | BluetoothMonitorReceiver | Bluetooth状态广播 | 蓝牙连接状态 | | HomeStatusReceiver | ACTION_HOME_STATUS_CHANGED | 主页状态变化 | | VolumeChangedCallback | 音量变化回调 | 音量变化监听 | | SettingReceiver | STREAM_MUTE_CHANGED_ACTION | 静音状态变化 | | TestReceiver | 测试相关Action | 测试功能 | ### 6.2 ContentObserver | 类名 | 监听URI | 功能 | |------|---------|------| | ScreenSaversObserver | STATE_URI + STANDBY_DIALOG_STATE | 屏保状态 | | MediaObserver | MEDIA_SOURCE_URI, MUSIC_INFO_URI | 媒体信息 | | ReverseObserver | 倒车相关URI | 倒车状态 | | BrightnessObserver | MPU_BRIGHTNESS_LEVEL | 亮度变化 | | SettingCommonObserver | VIDEO_LIMIT_URI等 | 通用设置 | --- ## 7. 状态同步机制 ### 7.1 初始化同步 当TXZ连接成功时,同步所有状态: ```java public void onConnected() { VoiceManager.getInstance().setVoiceBind(true); VoiceManager.VOICE_EVENT_HELPER.sendVoiceBindSuccess(null); AppHelper.getInstance().startScanApp(); initNotifyCarConfig(); // 车辆配置 initNotifyBluetoothStatus(); // 蓝牙状态 initNotifyVolumeStatus(); // 音量状态 initNotifyCarSettingStatus(); // 车辆设置状态 sendBrightnessStatus(); // 亮度状态 } ``` ### 7.2 状态同步命令 同步类命令(部分): | 命令 | 说明 | |------|------| | syncAcStatus | 同步空调状态 | | syncBlueToothStatus | 同步蓝牙状态 | | syncWiFiStatus | 同步WiFi状态 | | syncMediaVolume | 同步媒体音量 | | syncScreenBrightness | 同步屏幕亮度 | | syncVoiceWakeUpStatus | 同步语音唤醒开关 | --- ## 8. 依赖关系 ### 8.1 模块依赖 ``` YX_Voice ├── YX_IPC_SDK (IPC通信) ├── YX_Lib_CommonBase (公共基础库) ├── YX_AutoMotiveSDK (车载SDK) ├── library-release-0127.aar (TXZ协议库) ├── tools.jar (工具库) ├── framework_classes.jar (系统框架) └── serial-0.1.6_classes.jar (串口库) ``` ### 8.2 包名依赖 | 包名 | 说明 | |------|------| | com.txzing.voiceassistant | TXZ语音助手 | | com.yaxon.music | 音乐模块 | | com.yaxon.radio | 收音机模块 | | com.yaxon.hvac | 空调模块 | | com.yaxon.bluetooth | 蓝牙模块 | | com.yaxon.setting | 设置模块 | | com.yaxon.carcontrol | 车辆控制模块 | | com.yaxon.avm | 360环视模块 | | com.yaxon.dvr | 行车记录仪模块 | | com.android.systemui | 系统UI | --- ## 9. 权限声明 ```xml ``` --- ## 10. 部署配置 ### 10.1 Gradle配置 ```groovy android { defaultConfig { applicationId "com.yaxon.voice" } aaptOptions { noCompress "pcm" // 不压缩PCM音频文件 } buildTypes { release { outputFileName = "YX_Voice.apk" } } } ``` ### 10.2 Manifest配置 ```xml ``` --- ## 11. 附录 ### 11.1 文件结构 ``` YX_Voice/ ├── src/main/java/com/yaxon/voice/ │ ├── YxApplication.java # 应用入口 │ ├── api/ # 接口定义 │ │ ├── IProtocolHandler.java │ │ └── IProtocolLogic.java │ ├── constant/ # 常量定义 │ │ ├── PackageConst.java │ │ ├── VoiceNewProtocolConst.java │ │ └── VoiceProtocolConst.java │ ├── core/ # 核心类 │ │ ├── PackagePermissionManager.java │ │ ├── ProtocolManager.java │ │ ├── VoiceManager.java │ │ └── YxProtocolHandler.java │ ├── crash/ # 崩溃处理 │ │ └── CrashExceptionHandler.java │ ├── helper/ # 辅助类 │ │ ├── AppHelper.java │ │ ├── AudioFocusHelper.java │ │ ├── AudioTrackPlayer.java │ │ ├── BlueToothHelper.java │ │ ├── BrightnessHelper.java │ │ ├── ContactHelper.java │ │ ├── HandlerHelper.java │ │ ├── JsonHelper.java │ │ ├── McuHelper.java │ │ ├── VoiceEventHelper.java │ │ ├── VolumeHelper.java │ │ └── WifiHelper.java │ ├── impl/ # 回调实现 │ │ ├── CarAirCallback.java │ │ ├── CarIntelligentDrivingCallBack.java │ │ └── CarSettingCallback.java │ ├── protocol/ # 协议实现 │ │ ├── AirProtocol.java │ │ ├── AvmProtocol.java │ │ ├── BaseProtocol.java │ │ ├── BluetoothProtocol.java │ │ ├── CarControlProtocol.java │ │ ├── DvrProtocol.java │ │ ├── FactoryProtocol.java │ │ ├── MediaProtocol.java │ │ ├── SettingProtocol.java │ │ ├── SystemUIProtocol.java │ │ ├── VoiceProtocol.java │ │ └── YxProtocol.java │ ├── provider/ # ContentObserver │ │ ├── BrightnessObserver.java │ │ ├── MediaObserver.java │ │ ├── ReverseObserver.java │ │ ├── ScreenSaversObserver.java │ │ └── SettingCommonObserver.java │ ├── receiver/ # 广播接收器 │ │ ├── BluetoothMonitorReceiver.java │ │ ├── BootReceiver.java │ │ ├── HomeStatusReceiver.java │ │ ├── NetworkChangedReceiver.java │ │ ├── PowerReceiver.java │ │ ├── SettingReceiver.java │ │ ├── TestReceiver.java │ │ └── VolumeChangedCallback.java │ ├── service/ # 服务 │ │ ├── BaseVoiceService.java │ │ └── VoiceService.java │ └── utils/ # 工具类 │ ├── AppUtils.java │ ├── BroadcastUtils.java │ └── DataConvert.java ├── libs/ # 依赖库 │ ├── library-release-0127.aar │ └── tools.jar ├── assets/tts/ # TTS音频资源 └── build.gradle ``` ### 11.2 语音唤醒词设置流程 ``` 用户语音输入唤醒词 │ ▼ TXZ解析并发送协议: customWakeupWord │ ▼ VoiceProtocol.onProtocolLogic() │ ▼ VoiceEventHelper.customWakeupWord() │ ├── 检查当前值是否相同 ├── 保存到Settings.System └── 通过IPC发送到CAR_CAR_CONTROL_PKG │ ▼ 车辆控制模块更新唤醒词 ``` --- ## 12. 版本历史 | 版本 | 日期 | 作者 | 说明 | |------|------|------|------| | 1.0 | 2024-01-05 | 张博威 | 初始版本 | | 1.1 | 2024-02-19 | mango | TXZ协议集成 | | 1.2 | 2024-07-02 | ZhangBoWei | 协议抽象优化 | | 1.3 | 2025-03-13 | - | 唤醒词修改功能 | --- *文档生成日期: 2026-03-18*