# 1、介绍

## 概述

本文档介绍了KTV系统的功能以及接口的调用，统一开放三方接口API，能够在oppo、vivo、小米的安卓13.0手机上体验震撼的K歌体验。

KTV系统能满足统一开放API在Android 13.0机器上K歌实现几乎无延时耳返（Mic数字信号直接输入IC，接着直接输出至耳机，(vivo)实验室测试值35ms）；搭载多种默认经典混响和EQ均衡器音效，以及各个厂家可额外扩展的音效。

不同手机厂商支持的音效类型：【粗体标记为额外扩展的音效】

| 手机 | 混响音效                                                     | EQ均衡器音效                                                 |
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| oppo | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚                      | 0:无、1:标准、2:浑厚、3:清脆、4:明亮                         |
| vivo | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚**10: 温暖、11: 空灵、12: 3D迷幻、13: 老唱片** | 0:无、1:标准、2:浑厚、3:清脆、4:明亮**10: 温暖、11: 空灵、12: 3D迷幻、13: KTV** |
| 小米 | 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚                      | 0:无、1:标准、2:浑厚、3:清脆、4:明亮                         |

另外手机KTV提供非常小的接口库，调用简单，可使三方app快捷使用到卡拉OK效果。

如需在安卓13之前老版本集成该功能，请联系各个厂家提供方提供KTV旧方案，旧方案此前均有开放出来。

## 名词和缩写

- KTV

Karaoke Television(卡拉ok)

- OPPO

本文指代OPPO、OnePlus或realme手机设备

## 文档说明

本文档介绍了怎样使用KTV SDK进行应用程序开发，并给出了完整的例程。

本文是针对具有一些安卓编程经验的安卓应用程序员而写的。以下是文档中的一些约定符号：

|            |                                                    |
| ---------- | -------------------------------------------------- |
| **符号**   | **含义**                                           |
| \[in\]     | 表明该参数是调用时赋值的参数：输入参数             |
| \[out\]    | 该参数在函数返回时被赋值：输出参数                 |
| \[in/out\] | 该参数在函数调用时作为输入、函数返回时作为输出参数 |

OPPO平台接入前需要进行鉴权，详情见第4部分OPPO平台鉴权。

1. # 接口说明

   1. ## 接口简介

      1. ### 接口函数列表

MediaClient客户端类API提供如下函数供调用：

| 函数名称                    | 功能简介                                                     |
| --------------------------- | ------------------------------------------------------------ |
| initialize                  | 初始化并获取KTV MediaClient单例。                            |
| getVersion                  | 获取KTV SDK库版本号。                                        |
| isDeviceSupportKaraoke      | 判断当前机器设备能否支持KTV。                                |
| isAppSupportKaraoke         | 应用是否支持KTV。【oppo、vivo返回默认值true，小米手机检测】补充说明：小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能，请联系小米三方应用外部支持（mi-support-thirdapps@xiaomi.com）。 |
| isSupported                 | 应用是否支持KTV功能使用，注意此为前三个接口组合判断结果，通常来说三方只使用该接口判断是否支持。 |
| getKaraokeSupportParameters | 应用获取当前机器支持KTV的JSON参数信息，比如应用设置何种参数（AudioTrack的采样率、flag等，AudioRecord的source等），判断是否可以正常使用KTV功能。 |
| openKTVDevice               | 打开KTV设备，此动作必须是刚发生在播放伴奏前。                |
| closeKTVDevice              | 关闭KTV设备。                                                |
| setPlayFeedbackParam        | 控制耳返开启/关闭接口，系统默认打开，建议无论怎么app调用都打开调用一次，排除其他app不正确调用的干扰。 |
| getPlayFeedbackParam        | 获取当前耳返开关状态。                                       |
| setListenRecordSame         | 听录一致，选择录音输出数据，建议接口调用动作应发生在openKTVDevice后与录音前。【小米不支持此功能】 |
| getListenRecordSame         | 听录一致，获取当前音源的输出方式值。【仅vivo支持此功能】     |
| setMicVolParam              | 设置人声音量大小。                                           |
| getMicVolParam              | 获取当前人声音量值。                                         |
| setExtSpeakerParam          | 控制外接音响设备开关，这个接口的开出是为了当用户使用大音响或者大功放设备K歌，此情景下啸叫厉害，故开了此接口。【仅vivo支持此功能】 |
| getExtSpeakerParam          | 获取当前外接音响设备开关状态。【仅vivo支持此功能】           |
| setToneMode                 | 设置变声。【仅oppo支持此功能】                               |
| setMixerSoundType           | 设置混响效果。                                               |
| setEqualizerType            | 设置EQ均衡器音效。                                           |
| getExtMixerSoundType        | 扩展混响音效。                                               |
| getExtEqualizerType         | 扩展EQ均衡器音效。                                           |

MediaClientUtil客户端辅助类API提供如下函数供调用：

| 函数名称               | 功能简介                                                     |
| ---------------------- | ------------------------------------------------------------ |
| isOsVivo               | 是否为vivo手机设备                                           |
| isOsOppo               | 是否为OPPO手机设备                                           |
| isOsXiaoMi             | 是否为小米手机设备                                           |
| isKtvNewApiSupported   | 应用是否支持KTV新架构API功能使用，和直接调用MediaClient的【isSupported】结果一致 |
| isTargetAudioSupported | 目标客户端AudioRecord或AudioTrack的参数是否能够使用KTV新API功能 |

KtvSupportInfo客户端辅助类API，该类信息是从【getKaraokeSupportParameters】的JSON数据解析而来，表示当前机器支持KTV AudioTrack和AudioRecord的JSON参数信息，该类目前不直接提供功能函数给三方使用，只是用于辅助判断目标客户端AudioRecord或AudioTrack的参数是否能够使用KTV新API相关功能。

### 开发包组件

- Android平台

  | 开发组件  | 组件组成                                                     | 说明                                                         |
  | --------- | :----------------------------------------------------------- | ------------------------------------------------------------ |
  | 开放API类 | MediaClient.java 、MediaClientUtil.java、KtvSupportInfo.java | 接口类声明                                                   |
  | 运行时库  | gsai.sdk:media-client:1.0.0-SNAPSHOTgsai.sdk:mediastub:1.0.0-SNAPSHOT | SDK依赖 补充：1、添加 URL地址和版本1.0.0根据release最新版本修改2、如何依赖库代码片段请查看第4部分内容 |

### 开发包支持情况

| 系统    | 支持的安卓版本号 | 备注                                                         |
| ------- | ---------------- | ------------------------------------------------------------ |
| Android | 13.0             | 小米平台支持：小米12S、小米12S Pro、小米12S Ultra和Android T以上版本的高通平台机型 |

1. ## 函数调用

   1. ###  initialize

- 函数原型

public static MediaClient initialize(Context context)

- 功能

进程级的初始化操作，初始化并获取KTV MediaClient单例用于功能API调用。

- 参数&nbsp;

- context \[in\]

上下文，必现非空，建议传入全局Context，如使用getApplicationContext()。

- 返回值

静态函数调用，返回KTV MediaClient单例：

| 返回值          | 意义           |
| --------------- | -------------- |
| MediaClient单例 | 函数执行成功。 |

- 说明

初始化单例函数必须在调用其他函数之前调用，可多线程调用。

- 示例

MediaClient mc = MediaClient.initialize(getApplicationContext());

- 参见

略

###  getVersion

- 函数原型

public int getVersion()

- 功能

获取KTV SDK库版本号。

- 参数

无。

- 返回值

如果函数调用成功返回大于或等于10000，表示KTV API版本可用，否则返回-1，可能的值如下：

| 返回值 | 意义                                         |
| ------ | -------------------------------------------- |
| 10000  | 返回值大于或等于10000，表示KTV API版本可用。 |
| -1     | 该KTV API版本不可用                          |

- 说明

使用该返回值判断KTV API版本是否可用。

- 示例

// KTV sdk版本号

int version = mMediaClient.getVersion();

Log.d(TAG, "version is: " + version);

//不支持的版本，三方可选择自行适配（部分接口如果后续进行了拓展需要）

if (version \< 10000) {

//其他替代方案或界面提示

Log.d(TAG, "KTV version is not supported");

return;

} else {

Log.d(TAG, " KTV version is supported");

}

- 参见

isSupported

###  isDeviceSupportKaraoke

- 函数原型

public boolean isDeviceSupportKaraoke()

- 功能

判断当前机器设备能否支持KTV。

- 参数

无。

- 返回值

可能的值如下：

| 返回值 | 意义   |
| ------ | ------ |
| true   | 支持   |
| false  | 不支持 |

- 说明

使用该返回值判断当前机器设备能否支持KTV。

- 示例

// 判断当前机器设备能否支持KTV

boolean isSupportedForDevice = mMediaClient.isDeviceSupportKaraoke();

if (isSupportedForDevice) {

Log.d(TAG, "KTV is supported for current device");

} else {

Log.d(TAG, "KTV is not supported for current device");

return;

}

- 参见

isSupported

###  isAppSupportKaraoke

- 函数原型

public boolean isAppSupportKaraoke(String appName)

- 功能

应用是否支持KTV。【小米手机检测，OV返回默认值true】

补充说明：小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能，请联系小米三方应用外部支持（mi-support-thirdapps@xiaomi.com）。

- 参数&nbsp;

- appName \[in\]

APP包名，非空。

- 返回值

可能的值如下：

| 返回值 | 意义   |
| ------ | ------ |
| true   | 支持   |
| false  | 不支持 |

- 说明

使用该返回值判断应用是否支持KTV。

- 示例

// 判断KTV是否支持当前APP

boolean isSupportedForApp = mMediaClient.isAppSupportKaraoke(getApplicationContext().getPackageName());

if (isSupportedForApp) {

Log.d(TAG, "KTV is supported for current APP");

} else {

Log.d(TAG, "KTV is not supported for current device");

return;

}

- 参见

isSupported

###  isSupported

- 函数原型

public boolean isSupported()

- 功能

应用是否支持KTV功能使用，注意此为前三个接口【getVersion】、【isDeviceSupportKaraoke】、【isAppSupportKaraoke】组合判断结果，因此通常来说三方只使用该接口判断是否支持。

- 参数

无

- 返回值

可能的值如下：

| 返回值 | 意义   |
| ------ | ------ |
| true   | 支持   |
| false  | 不支持 |

- 说明

使用该返回值判断应用是否支持KTV功能使用，即KTV整个环境是否可用。

- 示例

boolean isNewApiSupported = client.isSupported();

if (DEBUG) {

if (isNewApiSupported) {

Log.d(TAG, "KTV is supported for the new architecture of KTV APIs, you can use them");

} else {

Log.d(TAG, "KTV is not supported for the new architecture of KTV APIs, " +

"you CAN NOT use them");

}

}

- 参见

getVersion、isDeviceSupportKaraoke、isAppSupportKaraoke

###  getKaraokeSupportParameters

- 函数原型

public String getKaraokeSupportParameters()

- 功能

应用获取当前机器支持KTV的JSON参数信息，比如应用设置何种参数（AudioTrack的采样率、flag等，AudioRecord的source等），判断是否可以正常使用KTV功能。

- 参数

无

- 返回值

可能的值如下：

| 返回值                                                       | 意义                                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| {   "audioTrackParam":[   {   "streamType":"3",   "sampleRate":"48000",   "format":"2",   "flag":"8"   }],   "audioRecordParam":[   {   "streamType":"default",   "sampleRate":"48000",   "format":"2",   "flag":"0x8",   "source":"1"   }],   "isSupportListenRecordSame":false,   "isSupportExtSpeakerParam":false,   "isSupportToneMode":false} | 参数格式定义：1、若支持任意参数, value置为"default";2、没有返回的key, value为默认值"default";3、所有value给十进制数值的字符串形式, 例如AUDIO_SOURCE_MIC需要返回"1", AUDIO_OUTPUT_FLAG_DEEP_BUFFER需要返回"8"。若该手机厂商不支持某个接口API则将配置不支持false，例如不支持setToneMode接口则设置isSupportToneMode:false。4、***\*注意：只在此处声明不支持的接口，JSON参数中没有声明的接口都表示支持\**** |
| null                                                         | 空值，KTV API不支持使用。默认都不会为空值                    |

- 说明

该返回值JSON信息表示当前机器支持KTV的JSON参数信息，比如应用设置目标参数（AudioTrack的采样率、flag等，AudioRecord的source等），判断是否可以正常使用KTV功能。

**注意：此JSON参数中只声明不支持的接口API，JSON参数中没有声明的接口都表示支持。**

- 示例

String ktvSupportInfoJson = mMediaClient.getKaraokeSupportParameters();

Log.d(TAG, "KTV ktvSupportInfoJson: " + ktvSupportInfoJson);

KtvSupportInfo supportInfo = new Gson().fromJson(ktvSupportInfoJson, KtvSupportInfo.class);

Log.d(TAG, "KTV isSupportListenRecordSame: " + supportInfo.isSupportListenRecordSame);

Log.d(TAG, "KTV isSupportExtSpeakerParam: " + supportInfo.isSupportExtSpeakerParam);

Log.d(TAG, "KTV isSupportToneMode: " + supportInfo.isSupportToneMode);

KtvSupportInfo.TrackSupportInfo targetTrackInfo =

new KtvSupportInfo.TrackSupportInfo("3", "48000", "2", "8");

Log.d(TAG, "KTV targetTrackInfo: " + targetTrackInfo.toString());

if (!MediaClientUtil.isTargetAudioSupported(supportInfo, targetTrackInfo)) {

return;

}

// track equals

KtvSupportInfo.RecordSupportInfo targetRecordInfo =

new KtvSupportInfo.RecordSupportInfo("default", "48000", "2", "8", "1");

Log.d(TAG, "KTV targetRecordInfo: " + targetRecordInfo.toString());

if (!MediaClientUtil.isTargetAudioSupported(supportInfo, targetRecordInfo)) {

return;

}

// record equals

// Anything you can do loudly with KTV

- 参见

无

###  openKTVDevice

- 函数原型

public void openKTVDevice()

- 功能

打开KTV设备，此动作必须是刚发生在播放伴奏前。

- 参数

无

- 返回值

无

- 示例

略;

- 参见

closeKTVDevice

###  closeKTVDevice

- 函数原型

public void closeKTVDevice()

- 功能

关闭KTV设备。

- 参数

无

- 返回值

无

- 示例

略;

- 参见

openKTVDevice

###  setPlayFeedbackParam

- 函数原型

public void setPlayFeedbackParam(int param)

- 功能

控制耳返开启/关闭接口，系统默认打开，建议无论怎么app调用都打开调用一次，排除其他app不正确调用的干扰。

- 参数&nbsp;

- param \[in\]

> 设置当前耳返开关状态：0 关闭，1 开启

- 返回值

无

- 说明

控制耳反开关功能，在【openKTVDevice】前后调用均可。

小米仅支持在 openKTVDevice后调用 setPlayFeedbackParam, 否则设置不生效。

- 示例

略

- 参见

> getPlayFeedbackParam

- 函数原型

public int getPlayFeedbackParam()

- 功能

获取当前耳返开关状态。

- 参数

> 无

- 返回值

可能的值如下：

| 返回值 | 意义                   |
| ------ | ---------------------- |
| 0      | 开关未打开             |
| 1      | 开关已打开             |
| -1     | 当前KTV该API接口不可用 |

- 说明

判断当前耳返开关状态

- 示例

略

- 参见

> setPlayFeedbackParam

### setListenRecordSame

- 函数原型

public void setListenRecordSame(int param)

- 功能

听录一致，选择录音输出数据，建议接口调用动作应发生在openKTVDevice后与录音前。【仅小米不支持此功能】

- 参数&nbsp;

- param \[In\]

传入参数为录音数据输出类型，类型为：【此功能不同手机厂商支持情况不同，如下】

| 手机厂商   | 类型 | 说明                                                        |
| ---------- | ---- | ----------------------------------------------------------- |
| oppo、vivo | 0    | 录音输出为原始录音数据                                      |
| oppo       | 1    | 录音输出为录音+应用playback数据，就是耳返数据（直播场景用） |
| vivo       | 2    | 录音输出为经过算法音效后的录音数据                          |

- 返回值

无

- 说明

该函数建议调用动作应发生在openKTVDevice后与录音前。

若设备不支持，则该API接口不可用。

若不支持则2.2.6中JSON支持参数中设置" isSupportListenRecordSame":false

- 示例

略

- 参见

> getListenRecordSame

### getListenRecordSame

- 函数原型

public int getListenRecordSame()

- 功能

听录一致，获取当前音源的输出方式值。【仅vivo支持此功能】

- 参数

无

- 返回值

听录一致，获取当前音源的输出方式值，可能的值如下：

【此功能不同手机厂商支持情况不同】

| 手机厂商   | 返回值 | 意义                                                        |
| ---------- | ------ | ----------------------------------------------------------- |
| oppo、vivo | 0      | 录音输出为原始录音数据                                      |
| oppo       | 1      | 录音输出为录音+应用playback数据，就是耳返数据（直播场景用） |
| vivo       | 2      | 录音输出为经过算法音效后的录音数据                          |
| oppo、vivo | -1     | 当前KTV该API接口不可用                                      |

- 说明

若设备不支持，则该API接口不可用

若不支持则2.2.6中JSON支持参数中设置" isSupportListenRecordSame":false

- 示例

略

- 参见

> setListenRecordSame

### setMicVolParam

- 函数原型

public void setMicVolParam(int param)

- 功能

设置人声音量大小。

- 参数&nbsp;

- param \[in\]

设置人声音量大小值范围：0\~15

- 返回值

无

- 说明

设置录音声音音量大小值。

- 示例

略

- 参见

getMicVolParam

### getMicVolParam

- 函数原型

public int getMicVolParam()

- 功能

获取当前人声音量值。

- 参数

无

- 返回值

可能的值如下：

| 返回值 | 意义                                |
| ------ | ----------------------------------- |
| 0~15   | 获取当前设置的KTV录音声音音量大小值 |
| -1     | 当前KTV该API接口不可用              |

- 说明

获取当前设置的KTV录音声音音量大小值，范围：0\~15

- 示例

略

- 参见

setMicVolParam

### setExtSpeakerParam

- 函数原型

public void setExtSpeakerParam(int param)

- 功能

控制外接音响设备开关，这个接口的开出是为了当用户使用大音响或者大功放设备K歌，此情景下啸叫厉害，故开了此接口。【仅vivo支持此功能】

- 参数

&nbsp;

- param \[in\]

0：关 1：开

- 返回值

无

- 说明

控制外接音响设备开关状态：0：关 1：开。

若设备不支持，则该API接口不可用。

若不支持则2.2.6中JSON支持参数中设置"isSupportExtSpeakerParam":false

- 示例

略

- 参见

getExtSpeakerParam

### getExtSpeakerParam

- 函数原型

public int getExtSpeakerParam()

- 功能

获取当前外接音响设备开关状态。【仅vivo支持此功能】

- 参数

无

- 返回值

可能的值如下：

| 返回值 | 意义                   |
| ------ | ---------------------- |
| 0      | 开                     |
| 1      | 关                     |
| -1     | 当前KTV该API接口不可用 |

- 说明

获取当前外接音响设备开关状态，若设备不支持，则该API接口不可用。

若不支持则2.2.6中JSON支持参数中设置"isSupportExtSpeakerParam":false

- 示例

略

- 参见

setExtSpeakerParam

### setToneMode

- 函数原型

public void setToneMode(int toneValue)

- 功能

设置变声类型。【仅OPPO支持此功能】

- 参数&nbsp;

- toneValue \[in\]

范围( -12 \~ 0 \~ 12 )

- 返回值

无

- 说明

设置变声类型，如果不支持则2.2.6中JSON支持参数中设置"isSupportToneMode":false

- 示例

略

- 参见

  1. ### setMixerSoundType

- 函数原型

public void setMixerSoundType(int param)

- 功能

设置混响效果。

- 参数&nbsp;

- param \[in\]

混响音效效果类型：

1.  Reverb default type ( 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚 )

2.  For vivo extensions as bellow: 【vivo设备上额外提供更多的效果类型】

> 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片

- 返回值

无

- 说明

设置混响音效效果类型。

**除了默认混响效果0-4类型，vivo设备**上通过调用【getExtMixerSoundType】接口额外获取更多提供的可用效果类型：10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片。

示例

略

- 参见

> getExtMixerSoundType

### getExtMixerSoundType

- 函数原型

public int\[\] getExtMixerSoundType()

- 功能

获取扩展混响音效类型ID数组。【可为空】

1.  For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】

> 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片

- 参数

无

- 返回值

可能的值如下：

| 返回值 | 意义                         |
| ------ | ---------------------------- |
| int[]  | 扩展混响音效类型ID数组       |
| null   | 空值，当前KTV该API接口不可用 |

- 说明

返回扩展混响音效类型ID数组。

**除了默认混响效果0-4类型，vivo设备上**通过调用该函数接口额外获取更多提供的可用效果类型：10: 温暖, 11: 空灵, 12: 3D迷幻, 13: 老唱片。

- 示例

略

- 参见

setMixerSoundType

### setEqualizerType

- 函数原型

public void setEqualizerType(int equalizerType)

- 功能

设置EQ均衡器音效类型。

- 参数&nbsp;

- equalizerType \[in\]

EQ均衡器音效效果类型：

3.  EQ default type ( 0:无、1:标准、2:浑厚、3:清脆、4:明亮 )

4.  For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】

> 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV

- 返回值

无

- 说明

设置EQ均衡器音效效果类型。

**除了默认EQ均衡器效果0-4类型，vivo设备**上通过调用【getExtEqualizerType】接口额外获取更多提供的可用效果类型：10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV。

- 示例

略

- 参见

> getExtEqualizerType

### getExtEqualizerType

- 函数原型

public int\[\] getExtMixerSoundType()

- 功能

获取扩展EQ均衡器音效类型ID数组。【可为空】

2.  For VIVO extensions as bellow: 【vivo设备上额外提供更多的效果类型】

> 10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV

- 参数

无

- 返回值

可能的值如下：

| 返回值 | 意义                         |
| ------ | ---------------------------- |
| int[]  | 扩展EQ均衡器音效类型ID数组   |
| null   | 空值，当前KTV该API接口不可用 |

- 说明

返回扩展EQ均衡器音效类型ID数组。

**除了默认EQ均衡器效果0-4类型，vivo设备上**通过调用该函数接口额外获取更多提供的可用效果类型：10: 温暖, 11: 空灵, 12: 3D迷幻, 13: KTV。

- 示例

略

- 参见

setEqualizerType

# 辅助类说明

由于MediaClientUtil和KtvSupportInfo辅助类功能简单，在第二部分的【接口函数列表】中基本已阐述，这里就不详细参数了，参考demo中实现使用即可。

# API使用说明

**1、基本使用流程（推荐流程，也可以根据自己的流程适配）**

1）获取MediaClient单例

2）isSupported判断应用是否支持KTV功能使用

3）演唱开始，先打开KTV系统，openKTVDevice

4）设置相关配置(vivo支持在openKTVDevice前设置)

setListenRecordSame 录音数据输出类型

setMixerSoundType 混响音效类型

setEqualizerType EQ音效类型

setPlayFeedbackParam 耳返开关

setMicVolParam 耳返音量大小

setExtSpeakerParam 设置外接设备项

5）再开启播放，最后开启录音 【小米仅支持deep buffer播放方式的KTV效果】

6）演唱结束，先关闭播放、录音

7）再closeKTVDevice 关闭KTV系统

8）该流程具体细节推荐参考Demo KTV中相关代码

**2、KTV统一接口API，可直接使用**

需要应用权限配置：

android.permission.MODIFY_AUDIO_SETTINGS

android.permission.RECORD_AUDIO

OPPO平台需要额外权限：

\<uses-permission android:name="com.oplus.ocs.permission.third"/\>

\<queries\>

> \<package android:name="com.coloros.karaoke"\>\</package\>
>
> \<package android:name="com.coloros.ocs.opencapabilityservice"\>\</package\>
>
> \<package android:name="com.oplus.ocs"\>\</package\>

\</queries\>

**3、OPPO 平台鉴权**

1）登录OPPO开放平台申请鉴权码，请参考[*官方指南*](https://open.oppomobile.com/new/developmentDoc/info?id=11152)

在应用的AndroidManifest.xml的配置如下标签，该标签和activity标签是同级别标签

\<meta-data

android:name="com.coloros.ocs.media.AUTH_CODE"

android:value="请替换为自身授权码" /\>

2. 在应用开启时注册耳返服务，设定悬浮球显示逻辑；通过 addOnOnConnectionSucceedListener 发起鉴权请求，可在鉴权成功的回调中使用openKTVDevice请求耳返服务。

   如果鉴权没有成功，openKTVDevice调用没有效果。例如：

**4、Gradle如何依赖aar库**

示例：

implementation 'gsai.sdk:media-client:1.0.0-SNAPSHOT'

compileOnly 'gsai.sdk:mediastub:1.0.0-SNAPSHOT'

说明：此处为第一个版本示例，版本号1.0.0需根据release最新版本修改

版本更新说明

| 版本号 | 更新内容        |
| ------ | --------------- |
| 1.0.0  | KTV系统接口统一 |