## apk安装
安装apk,将附件vwm_sdk解压并push到data目录下,给与vwm_sds目录下所有文件 chmod 777权限
```
adb push wvm_sdk /data/user/10/com.vwm.sds.engine/files/vwm_sdk/
```
## 初始化
### Manifest配置
服务查询权限申请
```
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
```
### 项目中导入vwm_sds.jar包, 引入AppLinkerServiceManager类,并初始化
`AppLinkerServiceManager.getInstance();`
### 服务绑定
`bind(Context context, BindCallback bindCallback)`
### 服务解绑
`unBind(Context context)`
## 数据结构
### RemoteRequest
**数据发送实体类**
| 属性名 | 类型 | 说明 |
| -------- | ----- | ---- |
| callId | String | 数据请求id,默认为UUID |
| actionName | String | 请求关键字,会根据此关键字查找订阅者 |
| params | Bundle | 数据参数,由数据发布者和订阅者共同约定此参数内容 |
### RemoteResult
**数据返回实体类**
| 属性名 | 类型 | 说明 |
| -------- | ----- | ---- |
| callId | String | 数据请求id,发送方RemoteRequest请求中的callId |
| success | boolean | 请求是否成功 |
| code | int | 请求失败code |
| errorMessage | String | 请求失败详细信息 |
| data | Bundle | 请求返回结果,由调用者和被调用者共同约定内容 |
## 监听数据更新
监听数据更新的应用需要向AppLinkerService注册关键字,此关键字由数据提供方来指定。
### 注册关键字监听
`register(String actionName, IRemoteConsumer.Stub consumer)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| actionName | String | 订阅关键字, |
| consumer | IRemoteConsumer | 数据更新回调 |
### 注销关键字监听
`unregister(String actionName, IRemoteConsumer.Stub consumer)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| actionName | String | 订阅关键字 |
| consumer | IRemoteConsumer | 数据更新回调 |
### 发送数据更新
`post(RemoteRequest request)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| actionName | String | 订阅关键字 |
| consumer | IRemoteConsumer | 数据更新回调 |
## 接口调用
能力提供者需要向AppLinkerService注册关键字actionName,关键字在系统中唯一。
### 注册为能力提供者
`addOnCallObserver(String actionName, IRemoteCallObserver.Stub observer)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| actionName | String | 接口能力关键字 |
| observer | IRemoteCallObserver | 接口回调 |
### 注销能力
`removeOnCallObserver(String actionName)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| actionName | String | 接口能力关键字 |
### 调用服务能力
`call(RemoteRequest request, IRemoteCallback.Stub callback)`
| 参数名 | 类型 | 说明 |
| -------- | ----- | ---- |
| request | RemoteRequest | 调用参数 |
| callback | IRemoteCallback | 数据回调 |
-----
## SDS Engine 对接
### 接口选择
对接接口主要使用能力提供者接口,服务监听方需要通过`addOnCallObserver(String actionName, IRemoteCallObserver.Stub observer)`接口注册为能力提供者,并通过 `IRmoteCallObserver`监听回调。
## 空调
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_AIR_CONTROL |
#### 键值信息
`RemoteRequest`会返回相同的`actionName`, 具体指信息通过`params(Bundle)`返回,
| 键 | 值 | 说明 |
| -------- | ----- | ---- |
| VWM_SDS_INTENT | open | 打开空调 |
| | close | 关闭空调 |
| | fanspeed_up | 调大风速 |
| | fanspeed_down | 调小风速 |
| | temperature_up | 调高温度 |
| | temperature_down | 调低温度 |
## 系统音量
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_VOLUME_CONTROL |
#### 键值信息
`RemoteRequest`会返回相同的`actionName`, 具体指信息通过`params(Bundle)`返回,
| 键 | 值 | 说明 |
| -------- | ----- | ---- |
| VWM_SDS_INTENT | increase_volume | 调大音量 |
| | decrease_volume | 调小音量 |
## 播放控制
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_MUSIC_PLAY_CONTROL |
#### 键值信息
`RemoteRequest`会返回相同的`actionName`, 具体指信息通过`params(Bundle)`返回,
| 键 | 值 | 说明 |
| -------- | ----- | ---- |
| VWM_SDS_INTENT | previous | 上一曲 |
| | next | 下一曲 |
| | continue | 开始播放 |
| | pause | 暂停 |
## 歌曲搜索
歌曲搜索需要客户端返回相应的搜索结果进行语音播报,所以需要客户端返回结果并监听tts播报结束然后播放搜索歌曲。
#### 发起搜索
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_MUSIC_SEARCH |
#### 键值信息
`RemoteRequest`会返回相同的`actionName`, 具体指信息通过`params(Bundle)`返回,
| 键 | 说明 | 类型 |
| -------- | ----- | ---- |
| VWM_SDS_SONG | 歌曲 | String |
| VWM_SDS_ARTIST | 歌手 | String |
| VWM_SDS_ALBUM| 专辑 | String |
| VWM_SDS_FEATURE | 歌曲类别(流行,摇滚...) | String |
| VWM_SDS_PROVIDER | 酷我音乐 | String |
| VWM_SDS_SPECIAL | 只有(离线\在线)两个值 | String |
| VWM_SDS_STORAGE | U盘 | String |
| VWM_SDS_INTENT | 播放音乐,无以上任何歌曲信息 | String |
示例:
* **播放音乐**
> VWM_SDS_INTENT=play
* **我要听酷我音乐**
> VWM_SDS_PROVIDER=酷我音乐
* **用在线音乐播放周杰伦的双截棍**
> VWM_SDS_SPECIAL=在线
VWM_SDS_ARTIST=周杰伦
VWM_SDS_SONG=双截棍
## tts播报结束
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_TTS_STOP |
#### 键值信息
无
## 导航到目的地
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_NAVIGATION_TO |
#### 键值信息
| 键 | 说明 | 类型 | 是否必须|
| -------- | ----- | ---- | ---|
| VWM_SDS_CITY | 目的地城市或省份, | String | 否|
| VWM_SDS_DESTINATION | 具体目的地 | String | 是 |
## 退出导航
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_STOP_NAVI |
#### 键值信息
| 键 | 值 | 说明 |
| -------- | ----- | ---- |
| VWM_SDS_INTENT | stop_navigate | 退出导航 |
## TTS 播报
TTS播报使用`call(RemoteRequest request, IRemoteCallback.Stub callback)`方法,通过在request的bundle传入需要播报的tts文本,来进行tts的播放
| 参数名 | 类型 | 值 |
| -------- | ----- | ---- |
| actionName | String | VWM_SDS_PLAY_TTS |
#### 键值信息
| 键 | 值 | 类型 |
| -------- | ----- | ---- |
| VWM_SDS_INTENT |tts文本 | String |