first commit

This commit is contained in:
admin committed 2026-11-05 14:35:04 +08:00
commit 669f49b1d6
342 files changed
+320811

No files matched your search

@@ -0,0 +1,655 @@
# 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
<!-- 系统权限 -->
<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配置
```groovy
android {
defaultConfig {
applicationId "com.yaxon.voice"
}
aaptOptions {
noCompress "pcm" // 不压缩PCM音频文件
}
buildTypes {
release {
outputFileName = "YX_Voice.apk"
}
}
}
```
### 10.2 Manifest配置
```xml
<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*