2023/11/02 15:39:41
为什么在 Android 设备上切换到其他 App 会改变音频路由?
问题描述
在 Android 设备上使用集成了声网 RTC SDK 的 App (以下简称 SDK App)进行实时音视频互动,切换到其他有音频输入或输出的 App,再切换回 SDK App 之后 SDK 的音频路由发生改变。
例如,用户在 SDK App 中通话并启用扬声器,通话过程中用听筒模式接听了 QQ 语音电话,结束 QQ 语音电话后返回 SDK App 通话,音频仍然通过听筒播放。
问题原因
在 Android 设备上从 SDK App 切换到其他 App 时,其他 App 可能会修改 SDK 的音频路由。由于 SDK 没有权限检测其他 App 对音频路由的修改,也无法判断是否已从其他 App 切换回来,因此切换回 SDK App 后仍然使用其他 App 的音频路由设置。
解决方案
在安卓原生方法 onResume
中检测当前的音频路由,然后调用 setEnableSpeakerphone
方法重新设置音频路由。可参考以下示例代码。
Java
@Override
protected void onResume() {
super.onResume();
AudioManager am = getAudioManager();
if (am.isSpeakerphoneOn()) {
Log.d("LOG:", "AUDIO_ROUTE_SPEAKERPHONE");
} else if (am.isBluetoothScoOn() || am.isBluetoothA2dpOn()) {
Log.d("LOG:", "AUDIO_ROUTE_HEADSETBLUETOOTH");
} else if (am.isWiredHeadsetOn()) {
Log.d("LOG:", "AUDIO_ROUTE_HEADSET");
} else {
Log.d("LOG:", "AUDIO_ROUTE_EARPIECE");
// 在此处调用 setEnableSpeakerphone 方法,设置音频路由为听筒或扬声器
}
}
public AudioManager getAudioManager() {
Context context = this.getApplicationContext();
if (context == null) {
return null;
}
return (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}