Files
Obsidian/项目文档/徐工/YX_Voice/docs/YX_Voice_详细设计文档 .md
2026-11-05 14:35:04 +08:00

25 KiB

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

职责:

  • 维护包名到协议逻辑类的映射
  • 在后台线程处理协议分发

协议映射表:

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实例

状态管理:

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 (协议处理接口):

public interface IProtocolHandler {
    void onHandleProtocol(long msgSendTime, String remoteName, Bundle data);
}

IProtocolLogic (协议逻辑接口):

public interface IProtocolLogic {
    void onProtocolLogic(Bundle data);
}

4.2 协议基类 (BaseProtocol)

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配置:

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) │
└─────────────────┘                       └─────────────────┘

连接流程:

TxzProtocolManager.initialize(this);
TxzProtocolManager.connect(PackageConst.TXZ_PKG_NEW);
TxzProtocolManager.getConnection(PackageConst.TXZ_PKG_NEW).addConnectionListener(this);

5.3 消息格式

Bundle格式:

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连接成功时,同步所有状态:

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. 权限声明

<!-- 系统权限 -->
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>

<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

<!-- 蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<!-- 存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<!-- 其他权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

10. 部署配置

10.1 Gradle配置

android {
    defaultConfig {
        applicationId "com.yaxon.voice"
    }

    aaptOptions {
        noCompress "pcm"  // 不压缩PCM音频文件
    }

    buildTypes {
        release {
            outputFileName = "YX_Voice.apk"
        }
    }
}

10.2 Manifest配置

<application
    android:name=".YxApplication"
    android:directBootAware="true"
    android:persistent="true"
    android:sharedUserId="android.uid.system">

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