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