# 设置音频路由 (/zh-CN/realtime-media/rtc/build/audio/audio-route)

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

<_PlatformTabsGroup>
<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="android" />
音频路由是指 App 在播放音频时使用的音频输出设备。例如，听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。

本文主要介绍音频路由的概念，并展示如何更改音频路由。

<a id="default"></a>
## 默认音频路由 [#默认音频路由]

默认音频路由是指设备本身采用的路由，例如移动设备上的扬声器。

在不同的场景下，SDK 使用的默认音频路由如下所示：

- 语音通话：听筒
- 视频通话：扬声器
- 语音直播：扬声器
- 视频直播：扬声器

## 更改音频路由 [#更改音频路由]

### 更改原则 [#更改原则]

根据使用角色的不同，你可以通过以下方法更改音频路由：

- 设备用户：添加或移除外部设备，例如耳机或蓝牙设备。
- App 开发者：
  - 加入频道前，调用 `setDefaultAudioRoutetoSpeakerphone` 更改默认音频路由。
  - 加入频道后，调用 `setEnableSpeakerphone` 设置当前的音频路由。

无论采用何种方法对音频路由进行更改，更改生效的优先级都遵循如下原则：

1. 用户行为对音频路由更改的优先级最高。

   用户连接有线耳机、蓝牙耳机等外部设备后，音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备，则音频路由会自动切换到最后一个连接的设备。

2. 当用户没有连接外部设备时，SDK 会使用[默认音频路由](#default)。

   调用 `setDefaultAudioRoutetoSpeakerphone` 可以更改该默认设置。如果当前音频路由是设备本身，`setDefaultAudioRoutetoSpeakerphone` 会修改当前音频路由。

3. 在没有系统限制的情况下，无论当前音频路由是外接设备、扬声器还是听筒，调用 `setEnableSpeakerphone` 都能切换当前音频路由。

   但该方法只对当前所在的频道生效，不会更改设备默认的音频路由。如果用户离开当前频道并加入新的频道，则 SDK 还是会使用默认的音频路由。

对音频路由的任何更改都会触发 `onAudioRouteChanged` 回调。你可以使用此回调来获取当前的音频路由。

### 插拔设备更改音频路由 [#插拔设备更改音频路由]

当用户连接音频设备时，音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时，音频路由会切换至最后连接的设备。

参考以下示例，了解插拔设备会怎样改变音频路由：

1. 用户加入频道。音频路由为扬声器。
2. 用户插入耳机。音频路由更改为耳机。
3. 用户在没有拔出耳机的状态下，将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
4. 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。

### 更改默认音频路由 [#更改默认音频路由]

在通话之前，调用 `setDefaultAudioRoutetoSpeakerphone` 方法将默认音频路由切换为听筒或扬声器。该方法的 `defaultToSpeaker` 参数传入 `true` 代表设置默认音频路由为扬声器；传入 `false` 代表设置默认音频路由为听筒。该方法的设置在调用 `destroy` 销毁引擎前都有效。

参考以下示例，了解如何更改默认音频路由：

1. 用户插入耳机。音频路由为耳机。
2. 用户拔出耳机。音频路由更改为移动设备的默认音频路由，具体取决于你的使用场景。
3. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由更改为扬声器。
4. 用户插入耳机。音频路由更改为耳机。
5. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由仍然为耳机，因为 `setDefaultAudioRoutetoSpeakerphone` 仅对设备本身的音频路由生效。
6. 用户拔出耳机。音频路由更改为扬声器。

### 更改当前音频路由 [#更改当前音频路由]

如果操作系统允许，你可以调用 `setEnableSpeakerphone` 方法，更改当前音频路由为扬声器。

参考以下示例，了解如何更改当前音频路由：

- **示例 1**

  1. 用户加入频道。音频路由为扬声器。
  2. 用户插入耳机。音频路由更改为耳机。
  3. App 调用 `setEnableSpeakerphone(true)`。音频路由仍然为耳机。

  :::warning[注意]
  在媒体音量模式下，如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备，则该方法的设置无效，音频只会通过外接设备播放。但对于安卓平台，在通话音量模式下，你可以先调用 `setRouteInCommunicationMode` 设置音频路由模式，再调用 `setEnableSpeakerphone` 来切换音频路由。
  :::

- **示例 2**

  1. 用户加入语音通话频道。音频路由为听筒。
  2. App 调用 `setEnableSpeakerphone(true)`。音频路由更改为扬声器。
  3. 用户插入耳机。音频路由更改为耳机。
  4. 用户拔出耳机。音频路由更改为听筒。

## 参考信息 [#参考信息]

### 示例项目 [#示例项目]

声网提供了设置音频路由的示例项目供你参考。你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">AudioCallRoute</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/react-native-agora/tree/main/example/src/examples/advanced/AudioCallRoute/AudioCallRoute.tsx" />
  <Card title={<RepositoryCardTitle provider="github">AudioCallRoute</RepositoryCardTitle>} href="https://github.com/AgoraIO-Extensions/react-native-agora/blob/main/examples/legacy/src/examples/advanced/AudioCallRoute/AudioCallRoute.tsx" />
</Cards>

### API 参考 [#api-参考]

- [`setEnableSpeakerphone`](/zh-CN/api-reference/rtc/android/device-management/audio-route#api_irtcengine_setenablespeakerphone)
- [`setDefaultAudioRouteToSpeakerphone`](/zh-CN/api-reference/rtc/android/device-management/audio-route#api_irtcengine_setdefaultaudioroutetospeakerphone)

- [`onAudioRoutingChanged`](/zh-CN/api-reference/rtc/android/device-management/audio-route#callback_irtcengineeventhandler_onaudioroutingchanged)
- [`setRouteInCommunicationMode`](/zh-CN/api-reference/rtc/android/device-management/audio-route#api_irtcengine_setrouteincommunicationmode)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="ios" />
音频路由是指 App 在播放音频时使用的音频输出设备。例如，听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。

本文主要介绍音频路由的概念，并展示如何更改音频路由。

<a id="default"></a>
## 默认音频路由 [#默认音频路由-1]

默认音频路由是指设备本身采用的路由，例如移动设备上的扬声器。

在不同的场景下，SDK 使用的默认音频路由如下所示：

- 语音通话：听筒
- 视频通话：扬声器
- 语音直播：扬声器
- 视频直播：扬声器

## 更改音频路由 [#更改音频路由-1]

### 更改原则 [#更改原则-1]

根据使用角色的不同，你可以通过以下方法更改音频路由：

- 设备用户：添加或移除外部设备，例如耳机或蓝牙设备。
- App 开发者：
  - 加入频道前，调用 `setDefaultAudioRoutetoSpeakerphone` 更改默认音频路由。
  - 加入频道后，调用 `setEnableSpeakerphone` 设置当前的音频路由。

无论采用何种方法对音频路由进行更改，更改生效的优先级都遵循如下原则：

1. 用户行为对音频路由更改的优先级最高。

   用户连接有线耳机、蓝牙耳机等外部设备后，音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备，则音频路由会自动切换到最后一个连接的设备。

2. 当用户没有连接外部设备时，SDK 会使用[默认音频路由](#default)。

   调用 `setDefaultAudioRoutetoSpeakerphone` 可以更改该默认设置。如果当前音频路由是设备本身，`setDefaultAudioRoutetoSpeakerphone` 会修改当前音频路由。

3. 在没有系统限制的情况下，无论当前音频路由是外接设备、扬声器还是听筒，调用 `setEnableSpeakerphone` 都能切换当前音频路由。

   但该方法只对当前所在的频道生效，不会更改设备默认的音频路由。如果用户离开当前频道并加入新的频道，则 SDK 还是会使用默认的音频路由。

:::warning[注意]
由于 iOS 系统限制，部分音频路由在通话音量模式下无法识别。因此，如需使用外接声卡或麦克风，建议将音频应用场景设置为高音质场景 `AgoraAudioScenarioGameStreaming`。在这种场景下，SDK 会切换到媒体音量规避该问题。
:::

对音频路由的任何更改都会触发 `didAudioRouteChanged` 回调。你可以使用此回调来获取当前的音频路由。

### 插拔设备更改音频路由 [#插拔设备更改音频路由-1]

当用户连接音频设备时，音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时，音频路由会切换至最后连接的设备。

参考以下示例，了解插拔设备会怎样改变音频路由：

1. 用户加入频道。音频路由为扬声器。
2. 用户插入耳机。音频路由更改为耳机。
3. 用户在没有拔出耳机的状态下，将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
4. 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。

### 更改默认音频路由 [#更改默认音频路由-1]

在通话之前，调用 `setDefaultAudioRoutetoSpeakerphone` 方法将默认音频路由切换为听筒或扬声器。该方法的 `defaultToSpeaker` 参数传入 `true` 代表设置默认音频路由为扬声器；传入 `false` 代表设置默认音频路由为听筒。该方法的设置在调用 `destroy` 销毁引擎前都有效。

参考以下示例，了解如何更改默认音频路由：

1. 用户插入耳机。音频路由为耳机。
2. 用户拔出耳机。音频路由更改为移动设备的默认音频路由，具体取决于你的使用场景。
3. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由更改为扬声器。
4. 用户插入耳机。音频路由更改为耳机。
5. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由仍然为耳机，因为 `setDefaultAudioRoutetoSpeakerphone` 仅对设备本身的音频路由生效。
6. 用户拔出耳机。音频路由更改为扬声器。

### 更改当前音频路由 [#更改当前音频路由-1]

如果操作系统允许，你可以调用 `setEnableSpeakerphone` 方法，更改当前音频路由为扬声器。

参考以下示例，了解如何更改当前音频路由：

- **示例 1**

  1. 用户加入频道。音频路由为扬声器。
  2. 用户插入耳机。音频路由更改为耳机。
  3. App 调用 `setEnableSpeakerphone(true)`。音频路由仍然为耳机。

  :::warning[注意]
  在媒体音量模式下，如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备，则该方法的设置无效，音频只会通过外接设备播放。但对于安卓平台，在通话音量模式下，你可以先调用 `setRouteInCommunicationMode` 设置音频路由模式，再调用 `setEnableSpeakerphone` 来切换音频路由。
  :::

- **示例 2**

  1. 用户加入语音通话频道。音频路由为听筒。
  2. App 调用 `setEnableSpeakerphone(true)`。音频路由更改为扬声器。
  3. 用户插入耳机。音频路由更改为耳机。
  4. 用户拔出耳机。音频路由更改为听筒。

## 参考信息 [#参考信息-1]

### API 参考 [#api-参考-1]

- [`setEnableSpeakerphone`](/zh-CN/api-reference/rtc/ios/device-management/audio-route#api_irtcengine_setenablespeakerphone)
- [`setDefaultAudioRouteToSpeakerphone`](/zh-CN/api-reference/rtc/ios/device-management/audio-route#api_irtcengine_setdefaultaudioroutetospeakerphone)

- [`didAudioRouteChanged`](/zh-CN/api-reference/rtc/ios/device-management/audio-route#callback_irtcengineeventhandler_onaudioroutingchanged)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="harmonyos" />
音频路由是指 App 在播放音频时使用的音频输出设备。例如，听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。

本文主要介绍音频路由的概念，并展示如何更改音频路由。

<a id="default"></a>
## 默认音频路由 [#默认音频路由-2]

默认音频路由是指设备本身采用的路由，例如移动设备上的扬声器。

在不同的场景下，SDK 使用的默认音频路由如下所示：

- 语音通话：听筒
- 视频通话：扬声器
- 语音直播：扬声器
- 视频直播：扬声器

## 更改音频路由 [#更改音频路由-2]

### 更改原则 [#更改原则-2]

根据使用角色的不同，你可以通过以下方法更改音频路由：

- 设备用户：添加或移除外部设备，例如耳机或蓝牙设备。
- App 开发者：加入频道前，调用 `setDefaultAudioRoutetoSpeakerphone` 更改默认音频路由。

无论采用何种方法对音频路由进行更改，更改生效的优先级都遵循如下原则：

1. 用户行为对音频路由更改的优先级最高。

   用户连接有线耳机、蓝牙耳机等外部设备后，音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备，则音频路由会自动切换到最后一个连接的设备。

2. 当用户没有连接外部设备时，SDK 会使用[默认音频路由](#default)。

   调用 `setDefaultAudioRoutetoSpeakerphone` 可以更改该默认设置。如果当前音频路由是设备本身，`setDefaultAudioRoutetoSpeakerphone` 会修改当前音频路由。

对音频路由的任何更改都会触发 `onAudioRouteChanged` 回调。你可以使用此回调来获取当前的音频路由。

### 插拔设备更改音频路由 [#插拔设备更改音频路由-2]

当用户连接音频设备时，音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时，音频路由会切换至最后连接的设备。

参考以下示例，了解插拔设备会怎样改变音频路由：

1. 用户加入频道。音频路由为扬声器。
2. 用户插入耳机。音频路由更改为耳机。
3. 用户在没有拔出耳机的状态下，将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
4. 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。

### 更改默认音频路由 [#更改默认音频路由-2]

在通话之前，调用 `setDefaultAudioRoutetoSpeakerphone` 方法将默认音频路由切换为听筒或扬声器。该方法的 `defaultToSpeaker` 参数传入 `true` 代表设置默认音频路由为扬声器；传入 `false` 代表设置默认音频路由为听筒。该方法的设置在调用 `destroy` 销毁引擎前都有效。

参考以下示例，了解如何更改默认音频路由：

1. 用户插入耳机。音频路由为耳机。
2. 用户拔出耳机。音频路由更改为移动设备的默认音频路由，具体取决于你的使用场景。
3. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由更改为扬声器。
4. 用户插入耳机。音频路由更改为耳机。
5. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由仍然为耳机，因为 `setDefaultAudioRoutetoSpeakerphone` 仅对设备本身的音频路由生效。
6. 用户拔出耳机。音频路由更改为扬声器。

## 参考信息 [#参考信息-2]

### API 参考 [#api-参考-2]

- [`setDefaultAudioRouteToSpeakerphone`](/zh-CN/api-reference/rtc/harmonyos/device-management/audio-route#api_irtcengine_setdefaultaudioroutetospeakerphone)
- `onAudioRoutingChanged`
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="unity" />
音频路由是指 App 在播放音频时使用的音频输出设备。例如，听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。本文主要介绍音频路由的概念，并展示如何更改音频路由。

:::warning[注意]
本文仅适用于 iOS 和 Android。
:::

<a id="default"></a>
## 默认音频路由 [#默认音频路由-3]

默认音频路由是指设备本身采用的路由，例如移动设备上的扬声器。

在不同的场景下，SDK 使用的默认音频路由如下所示：

- 语音通话：听筒
- 视频通话：扬声器
- 语音直播：扬声器
- 视频直播：扬声器

## 更改音频路由 [#更改音频路由-3]

### 更改原则 [#更改原则-3]

根据使用角色的不同，你可以通过以下方法更改音频路由：

- 设备用户：添加或移除外部设备，例如耳机或蓝牙设备。
- App 开发者：
  - 加入频道前，调用 `SetDefaultAudioRoutetoSpeakerphone` 更改默认音频路由。
  - 加入频道后，调用 `SetEnableSpeakerphone` 设置当前的音频路由。

无论采用何种方法对音频路由进行更改，更改生效的优先级都遵循如下原则：

1. 用户行为对音频路由更改的优先级最高。

   用户连接有线耳机、蓝牙耳机等外部设备后，音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备，则音频路由会自动切换到最后一个连接的设备。

2. 当用户没有连接外部设备时，SDK 会使用[默认音频路由](#default)。

   调用 `SetDefaultAudioRoutetoSpeakerphone` 可以更改该默认设置。如果当前音频路由是设备本身，`SetDefaultAudioRoutetoSpeakerphone` 会修改当前音频路由。

3. 在没有系统限制的情况下，无论当前音频路由是外接设备、扬声器还是听筒，调用 `SetEnableSpeakerphone` 都能切换当前音频路由。

   但该方法只对当前所在的频道生效，不会更改设备默认的音频路由。如果用户离开当前频道并加入新的频道，则 SDK 还是会使用默认的音频路由。

:::warning[注意]
由于 iOS 系统限制，部分音频路由在通话音量模式下无法识别。因此，如需使用外接声卡，建议将音频应用场景设置为高音质场景 `AUDIO_SCENARIO_GAME_STREAMING`。在这种场景下，SDK 会切换到媒体音量规避该问题。
:::

对音频路由的任何更改都会触发 `OnAudioRouteChanged` 回调。你可以使用此回调来获取当前的音频路由。

### 插拔设备更改音频路由 [#插拔设备更改音频路由-3]

当用户连接音频设备时，音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时，音频路由会切换至最后连接的设备。

参考以下示例，了解插拔设备会怎样改变音频路由：

1. 用户加入频道。音频路由为扬声器。
2. 用户插入耳机。音频路由更改为耳机。
3. 用户在没有拔出耳机的状态下，将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
4. 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。

### 更改默认音频路由 [#更改默认音频路由-3]

在通话之前，调用 `SetDefaultAudioRouteToSpeakerphone` 方法将默认音频路由切换为听筒或扬声器。该方法的 `defaultToSpeaker` 参数传入 `true` 代表设置默认音频路由为扬声器；传入 `false` 代表设置默认音频路由为听筒。该方法的设置在调用 `destroy` 销毁引擎前都有效。

参考以下示例，了解如何更改默认音频路由：

1. 用户插入耳机。音频路由为耳机。
2. 用户拔出耳机。音频路由更改为移动设备的默认音频路由，具体取决于你的使用场景。
3. 在 App 中调用 `SetDefaultAudioRoutetoSpeakerphone(true)`。音频路由更改为扬声器。
4. 用户插入耳机。音频路由更改为耳机。
5. 在 App 中调用 `SetDefaultAudioRoutetoSpeakerphone(true)`。音频路由仍然为耳机，因为 `SetDefaultAudioRoutetoSpeakerphone` 仅对设备本身的音频路由生效。
6. 用户拔出耳机。音频路由更改为扬声器。

### 更改当前音频路由 [#更改当前音频路由-2]

如果操作系统允许，你可以调用 `SetEnableSpeakerphone` 方法，更改当前音频路由为扬声器。

参考以下示例，了解如何更改当前音频路由：

- **示例 1**

  1. 用户加入频道。音频路由为扬声器。
  2. 用户插入耳机。音频路由更改为耳机。
  3. App 调用 `SetEnableSpeakerphone(true)`。音频路由仍然为耳机。

  :::warning[注意]
  如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备，则该方法的设置无效，音频只会通过外接设备播放。
  :::

- **示例 2**

  1. 用户加入语音通话频道。音频路由为听筒。
  2. App 调用 `SetEnableSpeakerphone(true)`。音频路由更改为扬声器。
  3. 用户插入耳机。音频路由更改为耳机。
  4. 用户拔出耳机。音频路由更改为听筒。

## 参考信息 [#参考信息-3]

### 示例项目 [#示例项目-1]

声网提供了设置音频路由的示例项目供你参考。你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">AudioCallRoute</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/Agora-Unity-Quickstart/blob/main/API-Example-Unity/Assets/API-Example/Examples/Advanced/AudioCallRoute/AudioCallRoute.cs" />
  <Card title={<RepositoryCardTitle provider="github">AudioCallRoute</RepositoryCardTitle>} href="https://github.com/AgoraIO-Extensions/Agora-Unity-Quickstart/blob/main/API-Example-Unity/Assets/API-Example/Examples/Advanced/AudioCallRoute/AudioCallRoute.cs" />
</Cards>

### API 参考 [#api-参考-3]

- [`SetEnableSpeakerphone`](/zh-CN/api-reference/rtc/unity/device-management/audio-route#api_irtcengine_setenablespeakerphone)
- [`SetDefaultAudioRouteToSpeakerphone`](/zh-CN/api-reference/rtc/unity/device-management/audio-route#api_irtcengine_setdefaultaudioroutetospeakerphone)
- [`OnAudioRoutingChanged`](/zh-CN/api-reference/rtc/unity/device-management/audio-route#callback_irtcengineeventhandler_onaudioroutingchanged)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="react-native" />
音频路由是指 App 在播放音频时使用的音频输出设备。例如，听筒、耳机、扬声器和可外放音频的蓝牙设备都可作为音频路由。

本文主要介绍音频路由的概念，并展示如何更改音频路由。

<a id="default"></a>
## 默认音频路由 [#默认音频路由-4]

默认音频路由是指设备本身采用的路由，例如移动设备上的扬声器。

在不同的场景下，SDK 使用的默认音频路由如下所示：

- 语音通话：听筒
- 视频通话：扬声器
- 语音直播：扬声器
- 视频直播：扬声器

## 更改音频路由 [#更改音频路由-4]

### 更改原则 [#更改原则-4]

根据使用角色的不同，你可以通过以下方法更改音频路由：

- 设备用户：添加或移除外部设备，例如耳机或蓝牙设备。
- App 开发者：
  - 加入频道前，调用 `setDefaultAudioRoutetoSpeakerphone` 更改默认音频路由。
  - 加入频道后，调用 `setEnableSpeakerphone` 设置当前的音频路由。

无论采用何种方法对音频路由进行更改，更改生效的优先级都遵循如下原则：

1. 用户行为对音频路由更改的优先级最高。

   用户连接有线耳机、蓝牙耳机等外部设备后，音频路由会自动切换到外部设备。如果用户先后连接了多个外部设备，则音频路由会自动切换到最后一个连接的设备。

2. 当用户没有连接外部设备时，SDK 会使用[默认音频路由](#default)。

   调用 `setDefaultAudioRoutetoSpeakerphone` 可以更改该默认设置。如果当前音频路由是设备本身，`setDefaultAudioRoutetoSpeakerphone` 会修改当前音频路由。

3. 在没有系统限制的情况下，无论当前音频路由是外接设备、扬声器还是听筒，调用 `setEnableSpeakerphone` 都能切换当前音频路由。

   但该方法只对当前所在的频道生效，不会更改设备默认的音频路由。如果用户离开当前频道并加入新的频道，则 SDK 还是会使用默认的音频路由。

:::warning[注意]
由于 iOS 系统限制，部分音频路由在通话音量模式下无法识别。因此，如需使用外接声卡或麦克风，建议将音频应用场景设置为高音质场景 `AgoraAudioScenarioGameStreaming`。在这种场景下，SDK 会切换到媒体音量规避该问题。
:::

对音频路由的任何更改都会触发 `onAudioRouteChanged` 回调。你可以使用此回调来获取当前的音频路由。

### 插拔设备更改音频路由 [#插拔设备更改音频路由-4]

当用户连接音频设备时，音频路由会发生改变。例如插入耳机时音频路由会自动切换到耳机。当连接多个设备时，音频路由会切换至最后连接的设备。

参考以下示例，了解插拔设备会怎样改变音频路由：

1. 用户加入频道。音频路由为扬声器。
2. 用户插入耳机。音频路由更改为耳机。
3. 用户在没有拔出耳机的状态下，将移动设备连接至蓝牙音频设备。音频路由更改为蓝牙音频设备。
4. 用户断开蓝牙音频设备与移动设备之间的连接。音频路由变回耳机。

### 更改默认音频路由 [#更改默认音频路由-4]

在通话之前，调用 `setDefaultAudioRoutetoSpeakerphone` 方法将默认音频路由切换为听筒或扬声器。该方法的 `defaultToSpeaker` 参数传入 `true` 代表设置默认音频路由为扬声器；传入 `false` 代表设置默认音频路由为听筒。该方法的设置在调用 `destroy` 销毁引擎前都有效。

参考以下示例，了解如何更改默认音频路由：

1. 用户插入耳机。音频路由为耳机。
2. 用户拔出耳机。音频路由更改为移动设备的默认音频路由，具体取决于你的使用场景。
3. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由更改为扬声器。
4. 用户插入耳机。音频路由更改为耳机。
5. 在 App 中调用 `setDefaultAudioRoutetoSpeakerphone(true)`。音频路由仍然为耳机，因为 `setDefaultAudioRoutetoSpeakerphone` 仅对设备本身的音频路由生效。
6. 用户拔出耳机。音频路由更改为扬声器。

### 更改当前音频路由 [#更改当前音频路由-3]

如果操作系统允许，你可以调用 `setEnableSpeakerphone` 方法，更改当前音频路由为扬声器。

参考以下示例，了解如何更改当前音频路由：

- **示例 1**

  1. 用户加入频道。音频路由为扬声器。
  2. 用户插入耳机。音频路由更改为耳机。
  3. App 调用 `setEnableSpeakerphone(true)`。音频路由仍然为耳机。

  :::warning[注意]
  在媒体音量模式下，如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备，则该方法的设置无效，音频只会通过外接设备播放。但对于安卓平台，在通话音量模式下，你可以先调用 `setRouteInCommunicationMode` 设置音频路由模式，再调用 `setEnableSpeakerphone` 来切换音频路由。
  :::

- **示例 2**

  1. 用户加入语音通话频道。音频路由为听筒。
  2. App 调用 `setEnableSpeakerphone(true)`。音频路由更改为扬声器。
  3. 用户插入耳机。音频路由更改为耳机。
  4. 用户拔出耳机。音频路由更改为听筒。

## 参考信息 [#参考信息-4]

### 示例项目 [#示例项目-2]

声网提供了设置音频路由的示例项目供你参考。你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">AudioCallRoute</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/react-native-agora/tree/main/example/src/examples/advanced/AudioCallRoute/AudioCallRoute.tsx" />
  <Card title={<RepositoryCardTitle provider="github">AudioCallRoute</RepositoryCardTitle>} href="https://github.com/AgoraIO-Extensions/react-native-agora/blob/main/examples/legacy/src/examples/advanced/AudioCallRoute/AudioCallRoute.tsx" />
</Cards>

### API 参考 [#api-参考-4]

- [`setEnableSpeakerphone`](/zh-CN/api-reference/rtc/react-native/device-management/audio-route#api_irtcengine_setenablespeakerphone)
- [`setDefaultAudioRouteToSpeakerphone`](/zh-CN/api-reference/rtc/react-native/device-management/audio-route#api_irtcengine_setdefaultaudioroutetospeakerphone)

- [`onAudioRoutingChanged`](/zh-CN/api-reference/rtc/react-native/device-management/audio-route#callback_irtcengineeventhandler_onaudioroutingchanged)
- [`setRouteInCommunicationMode`](/zh-CN/api-reference/rtc/react-native/device-management/audio-route#api_irtcengine_setrouteincommunicationmode)
<_PlatformProcessedMarker close="true" />
</_PlatformTabsGroup>
