音频路由
- 在无外接设备时,使用默认的音频输出设备(设备内置的听筒或扬声器)。一旦接入外部设备,CallPlus SDK 仅会使用外接设备。
- 在接入有线耳机、蓝牙耳机、蓝牙音响等外部设备时,自动根据设备连接顺序、可用状态切换当前输出设备。当有多个外接设备时,音频会通过最后一个接入的设备播放。
管理音频路由
CallPlus SDK 提供了 RCCallPlusAudioRouteClient,用于管理音频路由。
初始化音频路由模块
- 初始化音频路由模块,使用
RCCallPlusAudioRouteClient.getInstance().init(Context context)
方法。可以在 IM SDK 初始化之前和 CallPlus SDK 初始化之前调用该方法。 - 如需判断音频路由模块是否已经初始化,可以使用
hasInit()
方法。 - 如需反初始化音频路由模块,可以使用
unInit()
方法。
注意
在初始化 SDK 提供的音频路由管理类之后,不推荐 App 再调用系统的 AudioManager 修改音频输出通道,否则可能导致 SDK 内部的音频路由管理类状态错误。若必须使用,请在相关业务处理完成之后调用 resetAudioRouteState 方法重置音频路由管理类状态。
获取当前音频路由类型
CallPlus SDK 定义了音频路由类型 RCCallPlusAudioRouteType,可通过以下方式获取当前音频路由类型:
RCCallPlusAudioRouteClient.getInstance().getCurrentRouteType();
是否插有线耳机
RCCallPlusAudioRouteClient.getInstance().hasHeadSet();
是否连接蓝牙耳机
RCCallPlusAudioRouteClient.getInstance().hasBluetoothA2dpConnected();
监听音频路由变更
应用程序可以通过音频路由监听器 IRCCallPlusAudioRouteListener 获取变更通知。
使用 setOnAudioRouteChangedListener 设置音频路由监听器。在使用完成之后请及时将监听器设置为 null
,避免造成内存泄漏。
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 官方文档 中的说明。
在使用该类方法之前,请确保已经动态申请了以下权限:
<!-- 允许应用程序连接到配对的蓝牙设备 -->
<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"/>