655 lines
25 KiB
Markdown
655 lines
25 KiB
Markdown
# 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*
|