跳到主要内容

音频路由

  1. 在无外接设备时,使用默认音频输出设备(设备内置的听筒或扬声器)。一旦接入外部设备,CallPlus SDK 将仅使用外接设备。
  2. 在接入有线耳机、蓝牙耳机、蓝牙音响等外部设备时,将根据设备连接顺序与可用状态自动切换当前输出设备。当存在多个外接设备时,音频会通过最后一个接入的设备播放。

管理音频路由

CallPlus SDK 提供了 RCCallPlusAudioRouteClient,用于管理音频路由。

初始化音频路由模块

  • 初始化音频路由模块:调用 RCCallPlusAudioRouteClient.getInstance().init(Context context)。可在 IMLib 和 CallPlus 初始化之前调用。
  • 判断音频路由模块是否已经初始化:调用 hasInit() 方法。
  • 反初始化音频路由模块:调用 unInit()
提示

初始化 SDK 提供的音频路由管理类后,不建议 App 再通过系统的 AudioManager 修改音频输出通道,否则可能导致 SDK 内部音频路由管理类状态异常。若必须使用,请在相关业务处理完成后调用 resetAudioRouteState 重置音频路由管理类状态。

获取当前音频路由类型

CallPlus SDK 定义了音频路由类型 RCCallPlusAudioRouteType,通过以下方式获取当前音频路由类型:

Java
RCCallPlusAudioRouteClient.getInstance().getCurrentRouteType();

检测是否插入有线耳机

Java
RCCallPlusAudioRouteClient.getInstance().hasHeadSet();

检测是否连接蓝牙耳机

Java
RCCallPlusAudioRouteClient.getInstance().hasBluetoothA2dpConnected();

监听音频路由变更

应用可通过音频路由监听器 IRCCallPlusAudioRouteListener 获取变更通知。

使用 setOnAudioRouteChangedListener 设置音频路由监听器。使用完成后请及时将监听器设置为 null,避免内存泄漏。

Java
RCCallPlusAudioRouteClient.getInstance().setOnAudioRouteChangedListener(new IRCCallPlusAudioRouteListener() {

/**
* 音频路由设备变更通知
*
* @param type 设备类型
*/
@Override
public void onRouteChanged(RCCallPlusAudioRouteType type) {

}

/**
* 音频路由切换失败通知
*
* @param fromType 原类型
* @param toType 目标类型
*/
@Override
public void onRouteSwitchFailed(RCCallPlusAudioRouteType fromType, RCCallPlusAudioRouteType toType) {

}
});

关于蓝牙权限的提示

从 Android 12 开始,历史的蓝牙权限被拆分为 3 个新的运行时权限(连接、扫描、广播)。详细说明参阅Android 官方文档

在使用上述方法前,请确保已动态申请以下权限:

xml
<!-- 允许应用连接到已配对的蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!-- 用于使用蓝牙扫描附件其他的蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
<!-- 允许应用发现和配对蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 允许当前设备被其他蓝牙设备发现 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
<!-- 允许连接之前已配对的蓝牙设备 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>