# 插件 (/zh-CN/api-reference/rtc/android/extension)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

<a id="toc_extension"></a>

<a id="api_irtcengine_addextension"></a>

<a id="ariaid-title2"></a>

## addExtension [#addextension]

添加扩展。

<a id="api_irtcengine_addextension__prototype"></a>

```java
public void addExtension(String providerName)
```

<a id="api_irtcengine_addextension__detailed_desc"></a>

<a id="api_irtcengine_addextension__parameters"></a>

### 参数 [#参数]

<ParameterList>
<a id="providername"></a>
<Parameter name="providerName">

要添加的扩展名称。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_enableextension"></a>

<a id="ariaid-title3"></a>

## enableExtension [#enableextension]

启用或禁用扩展功能。

<a id="api_irtcengine_enableextension__prototype"></a>

```java
public abstract int enableExtension(String provider, String extension, boolean enable);
```

<a id="api_irtcengine_enableextension__detailed_desc"></a>

通过调用该方法，你可以动态启用或禁用扩展功能，而无需更改处理流程。

:::note
注： [enableExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_enableextension) 会在未调用 [registerExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_registerextension) 的情况下自动注册指定扩展，以保证兼容性。建议你显式调用 [registerExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_registerextension)。
:::

<a id="api_irtcengine_enableextension__parameters"></a>

### 参数 [#参数-1]

<ParameterList>
<a id="provider"></a>
<Parameter name="provider">

扩展功能提供方的名称，例如 `agora.io`。

</Parameter>
<a id="extension"></a>
<Parameter name="extension">

扩展功能的名称，例如 `agora.beauty`。

</Parameter>
<a id="enable"></a>
<Parameter name="enable">

是否启用该扩展功能：

- true：（默认）启用扩展功能。
- false：禁用扩展功能。

</Parameter>
</ParameterList>

<a id="api_irtcengine_enableextension__return_values"></a>

### 返回值 [#返回值]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-1]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_getextensionproperty"></a>

<a id="ariaid-title4"></a>

## getExtensionProperty [1/2] [#getextensionproperty-12]

获取扩展组件的详细信息。

<a id="api_irtcengine_getextensionproperty__prototype"></a>

```java
public abstract String getExtensionProperty(String provider, String extension, String key);
```

<a id="api_irtcengine_getextensionproperty__detailed_desc"></a>

<a id="api_irtcengine_getextensionproperty__timing"></a>

### 调用时机 [#调用时机]

该方法可以在加入频道前或加入频道后调用。

<a id="api_irtcengine_getextensionproperty__parameters"></a>

### 参数 [#参数-2]

<ParameterList>
<a id="provider-1"></a>
<Parameter name="provider">

扩展组件提供方的名称。

</Parameter>
<a id="extension-1"></a>
<Parameter name="extension">

扩展组件的名称。

</Parameter>
<a id="key"></a>
<Parameter name="key">

扩展组件的键值。

</Parameter>
</ParameterList>

<a id="api_irtcengine_getextensionproperty__return_values"></a>

### 返回值 [#返回值-1]

- 方法调用成功时，返回扩展组件的信息。
- 方法调用失败，返回空字符串。

### 所属接口类 [#所属接口类-2]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_getextensionproperty2"></a>

<a id="ariaid-title5"></a>

## getExtensionProperty [2/2] [#getextensionproperty-22]

获取扩展组件的详细信息。

<a id="api_irtcengine_getextensionproperty2__prototype"></a>

```java
public abstract String getExtensionProperty(String provider, String extension, String key, Constants.MediaSourceType sourceType);
```

<a id="api_irtcengine_getextensionproperty2__detailed_desc"></a>

<a id="api_irtcengine_getextensionproperty2__timing"></a>

### 调用时机 [#调用时机-1]

该方法可以在加入频道前或加入频道后调用。

<a id="api_irtcengine_getextensionproperty2__parameters"></a>

### 参数 [#参数-3]

<ParameterList>
<a id="provider-2"></a>
<Parameter name="provider">

扩展组件提供方的名称。

</Parameter>
<a id="extension-2"></a>
<Parameter name="extension">

扩展组件的名称。

</Parameter>
<a id="key-1"></a>
<Parameter name="key">

扩展组件的键值。

</Parameter>
<a id="sourcetype"></a>
<Parameter name="sourceType">

扩展组件的来源类型，详见 [MediaSourceType](/zh-CN/api-reference/rtc/android/enum-mediasourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_getextensionproperty2__return_values"></a>

### 返回值 [#返回值-2]

- 方法调用成功时，返回扩展组件的信息。
- 方法调用失败，返回空字符串。

### 所属接口类 [#所属接口类-3]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_registerextension"></a>

<a id="ariaid-title6"></a>

## registerExtension [#registerextension]

注册一个扩展。

<a id="api_irtcengine_registerextension__prototype"></a>

```java
public abstract int registerExtension(String provider, String extension, Constants.MediaSourceType sourceType);
```

<a id="api_irtcengine_registerextension__detailed_desc"></a>

- 对于 SDK 外部的扩展（例如来自云市场和 SDK 扩展），你需要在调用 [registerExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_registerextension) 之前先通过 [addExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_addextension) 加载它们。
- 对于 SDK 内部的扩展（即包含在完整 SDK 包中的扩展），在初始化 [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine) 后会自动加载并注册。

:::note
注：

- 如果你想注册多个扩展，需要多次调用此方法。
- SDK 中不同扩展的数据处理顺序由注册顺序决定。即先注册的扩展会先处理数据。
:::

<a id="api_irtcengine_registerextension__timing"></a>

### 调用时机 [#调用时机-2]

声网建议你在初始化 [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine) 后、加入频道前调用此方法。

- 对于视频扩展（如美颜特效扩展），你需要在调用 [enableVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_enablevideo) 或 [enableLocalVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_enablelocalvideo) 启用视频模块后再调用此方法。
- 在调用此方法之前，你需要先调用 [addExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_addextension) 加载扩展。

<a id="api_irtcengine_registerextension__parameters"></a>

### 参数 [#参数-4]

<ParameterList>
<a id="provider-3"></a>
<Parameter name="provider">

扩展提供方的名称。

</Parameter>
<a id="extension-3"></a>
<Parameter name="extension">

扩展的名称。

</Parameter>
<a id="sourcetype-1"></a>
<Parameter name="sourceType">

扩展的数据源类型，详见 [MediaSourceType](/zh-CN/api-reference/rtc/android/enum-mediasourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_registerextension__return_values"></a>

### 返回值 [#返回值-3]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

  - -3：扩展库未加载。建议你检查动态库的存储位置或名称。

### 所属接口类 [#所属接口类-4]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setextensionproperty"></a>

<a id="ariaid-title7"></a>

## setExtensionProperty [#setextensionproperty]

设置扩展组件的属性。

<a id="api_irtcengine_setextensionproperty__prototype"></a>

```java
public abstract int setExtensionProperty(String provider, String extension, String key, String value);
```

<a id="api_irtcengine_setextensionproperty__detailed_desc"></a>

启用扩展组件后，可以调用该方法设置其属性。

:::note
注： 如果你需要为多个扩展组件设置属性，需要多次调用该方法。
:::

<a id="api_irtcengine_setextensionproperty__timing"></a>

### 调用时机 [#调用时机-3]

在调用 [enableExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_enableextension) 方法之后调用该方法。

<a id="api_irtcengine_setextensionproperty__parameters"></a>

### 参数 [#参数-5]

<ParameterList>
<a id="provider-4"></a>
<Parameter name="provider">

扩展组件提供方的名称。

</Parameter>
<a id="extension-4"></a>
<Parameter name="extension">

扩展组件的名称。

</Parameter>
<a id="key-2"></a>
<Parameter name="key">

扩展组件属性的键。

</Parameter>
<a id="value"></a>
<Parameter name="value">

扩展组件属性键对应的值。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setextensionproperty__return_values"></a>

### 返回值 [#返回值-4]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-5]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setextensionproviderproperty"></a>

<a id="ariaid-title8"></a>

## setExtensionProviderProperty [#setextensionproviderproperty]

设置扩展提供方的属性。

<a id="api_irtcengine_setextensionproviderproperty__prototype"></a>

```java
public abstract int setExtensionProviderProperty(String provider, String key, String value);
```

<a id="api_irtcengine_setextensionproviderproperty__detailed_desc"></a>

你可以调用该方法根据扩展提供方的类型初始化相关参数。

:::note
注： 如果你想为多个扩展设置扩展提供方的属性，需要多次调用该方法。
:::

<a id="api_irtcengine_setextensionproviderproperty__timing"></a>

### 调用时机 [#调用时机-4]

在调用 [enableExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_enableextension) 之前，[registerExtension](/zh-CN/api-reference/rtc/android/extension#api_irtcengine_registerextension) 之后调用该方法。

<a id="api_irtcengine_setextensionproviderproperty__parameters"></a>

### 参数 [#参数-6]

<ParameterList>
<a id="provider-5"></a>
<Parameter name="provider">

扩展提供方的名称。

</Parameter>
<a id="key-3"></a>
<Parameter name="key">

扩展属性的键名。

</Parameter>
<a id="value-1"></a>
<Parameter name="value">

扩展属性键对应的值。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setextensionproviderproperty__return_values"></a>

### 返回值 [#返回值-5]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-6]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="callback_irtcengineeventhandler_onextensionerrorwithcontext"></a>

<a id="ariaid-title9"></a>

## onErrorWithContext [#onerrorwithcontext]

扩展运行异常时触发的回调。

<a id="callback_irtcengineeventhandler_onextensionerrorwithcontext__prototype"></a>

```java
default void onErrorWithContext(ExtensionContext extContext, int error, String message)
```

<a id="callback_irtcengineeventhandler_onextensionerrorwithcontext__detailed_desc"></a>

<a id="callback_irtcengineeventhandler_onextensionerrorwithcontext__timing"></a>

### 触发时机 [#触发时机]

该回调在扩展启用失败或运行过程中发生错误时被触发。

<a id="callback_irtcengineeventhandler_onextensionerrorwithcontext__parameters"></a>

### 参数 [#参数-7]

<ParameterList>
<a id="extcontext"></a>
<Parameter name="extContext">

扩展的上下文信息。详见 [ExtensionContext](/zh-CN/api-reference/rtc/android/class-extensioncontext)。

</Parameter>
<a id="error"></a>
<Parameter name="error">

错误码。

</Parameter>
<a id="message"></a>
<Parameter name="message">

错误原因。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-7]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onextensioneventwithcontext"></a>

<a id="ariaid-title10"></a>

## onEventWithContext [#oneventwithcontext]

扩展事件回调。

<a id="callback_irtcengineeventhandler_onextensioneventwithcontext__prototype"></a>

```java
default void onEventWithContext(ExtensionContext extContext, String key, String value)
```

<a id="callback_irtcengineeventhandler_onextensioneventwithcontext__detailed_desc"></a>

你需要注册该回调，用于在扩展运行期间监听事件。

<a id="callback_irtcengineeventhandler_onextensioneventwithcontext__parameters"></a>

### 参数 [#参数-8]

<ParameterList>
<a id="extcontext-1"></a>
<Parameter name="extContext">

扩展的上下文信息，详见 [ExtensionContext](/zh-CN/api-reference/rtc/android/class-extensioncontext)。

</Parameter>
<a id="key-4"></a>
<Parameter name="key">

扩展事件的键。

</Parameter>
<a id="value-2"></a>
<Parameter name="value">

扩展事件键对应的值。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-8]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onextensionstartedwithcontext"></a>

<a id="ariaid-title11"></a>

## onStartedWithContext [#onstartedwithcontext]

扩展启用成功回调。

<a id="callback_irtcengineeventhandler_onextensionstartedwithcontext__prototype"></a>

```java
default void onStartedWithContext(ExtensionContext extContext)
```

<a id="callback_irtcengineeventhandler_onextensionstartedwithcontext__detailed_desc"></a>

<a id="callback_irtcengineeventhandler_onextensionstartedwithcontext__timing"></a>

### 触发时机 [#触发时机-1]

该回调在扩展成功启用后被触发。

<a id="callback_irtcengineeventhandler_onextensionstartedwithcontext__parameters"></a>

### 参数 [#参数-9]

<ParameterList>
<a id="extcontext-2"></a>
<Parameter name="extContext">

扩展的上下文信息。详见 [ExtensionContext](/zh-CN/api-reference/rtc/android/class-extensioncontext)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-9]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onextensionstoppedwithcontext"></a>

<a id="ariaid-title12"></a>

## onStoppedWithContext [#onstoppedwithcontext]

扩展被禁用时触发的回调。

<a id="callback_irtcengineeventhandler_onextensionstoppedwithcontext__prototype"></a>

```java
default void onStoppedWithContext(ExtensionContext extContext)
```

<a id="callback_irtcengineeventhandler_onextensionstoppedwithcontext__detailed_desc"></a>

<a id="callback_irtcengineeventhandler_onextensionstoppedwithcontext__timing"></a>

### 触发时机 [#触发时机-2]

该回调在扩展被成功禁用后触发。

<a id="callback_irtcengineeventhandler_onextensionstoppedwithcontext__parameters"></a>

### 参数 [#参数-10]

<ParameterList>
<a id="extcontext-3"></a>
<Parameter name="extContext">

扩展的上下文信息。详见 [ExtensionContext](/zh-CN/api-reference/rtc/android/class-extensioncontext)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-10]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)
