跳到主要内容

音频路由

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

管理音频路由

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"/>