Skip to content

setAudioInterruption

设置音频中断状态

setAudioInterruptionSUDRTGameAudioSession 接口中用于处理外部干扰(如电话呼入、系统闹钟或语音助手唤醒)的核心方法。它允许 App 手动挂起或恢复游戏的音频渲染流程,确保在非游戏场景下设备音频资源的合理分配。


方法声明

java
/**
 * 设置当前游戏实例的音频中断状态。
 * @param var1 传入 true 表示触发中断(挂起音频);传入 false 表示解除中断(恢复音频)。
 */
void setAudioInterruption(boolean var1);

运行行为

  1. 资源挂起:当调用 setAudioInterruption(true) 时,SDK 会暂停音频轨道的处理。这与 mute 不同,中断通常意味着音频引擎进入“待机”状态,减少不必要的性能开销。
  2. 焦点配合:在 Android 系统中,当其他应用(如拨号器)请求 AUDIOFOCUS_GAIN 时,App 应主动调用此方法。
  3. 状态恢复:当外部干扰结束(如电话挂断),调用 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);
}

注意事项

  • 与生命周期结合:强烈建议在 onPauseonResume 中成对使用此方法,以符合 Android 绿色应用规范,防止 App 退到后台后依然占用音频通道。
  • VOIP 冲突:如果您的 App 带有原生的语音通话功能,在开启通话时必须设置 setAudioInterruption(true),否则游戏声音可能会通过麦克风回传产生回音。
  • 静音区别mute 仅是音量归零,而 setAudioInterruption 会影响底层音频流的活跃状态。