setAudioInterruption
设置音频中断状态
setAudioInterruption 是 SUDRTGameAudioSession 接口中用于处理外部干扰(如电话呼入、系统闹钟或语音助手唤醒)的核心方法。它允许 App 手动挂起或恢复游戏的音频渲染流程,确保在非游戏场景下设备音频资源的合理分配。
方法声明
java
/**
* 设置当前游戏实例的音频中断状态。
* @param var1 传入 true 表示触发中断(挂起音频);传入 false 表示解除中断(恢复音频)。
*/
void setAudioInterruption(boolean var1);运行行为
- 资源挂起:当调用
setAudioInterruption(true)时,SDK 会暂停音频轨道的处理。这与mute不同,中断通常意味着音频引擎进入“待机”状态,减少不必要的性能开销。 - 焦点配合:在 Android 系统中,当其他应用(如拨号器)请求
AUDIOFOCUS_GAIN时,App 应主动调用此方法。 - 状态恢复:当外部干扰结束(如电话挂断),调用
setAudioInterruption(false),游戏音频将从中断点平滑恢复,无需重新初始化音频会话。
代码示例
在 Android Activity 的生命周期或广播接收器中处理音频中断:
java
// 获取音频会话控制对象
SUDRTGameAudioSession audioSession = mGameHandle.getAudioSession();
// 模拟监听到系统电话状态改变
public void onPhoneStateChanged(int state) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
// 1. 电话响铃,立即中断游戏音频,避免干扰通话
audioSession.setAudioInterruption(true);
} else if (state == TelephonyManager.CALL_STATE_IDLE) {
// 2. 通话结束,恢复游戏音频
audioSession.setAudioInterruption(false);
}
}
// 建议在 Activity 生命周期中也进行同步
@Override
protected void onPause() {
super.onPause();
// 切换后台时通常也建议设置中断
audioSession.setAudioInterruption(true);
}注意事项
- 与生命周期结合:强烈建议在
onPause和onResume中成对使用此方法,以符合 Android 绿色应用规范,防止 App 退到后台后依然占用音频通道。 - VOIP 冲突:如果您的 App 带有原生的语音通话功能,在开启通话时必须设置
setAudioInterruption(true),否则游戏声音可能会通过麦克风回传产生回音。 - 静音区别:
mute仅是音量归零,而setAudioInterruption会影响底层音频流的活跃状态。