You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin应用与Spotify/Deezer等音乐App音频共存方案问询

解决方案:让Xamarin应用与Spotify/Deezer同时播放音频

问题出在你当前的音频会话配置会抢占系统音频焦点,导致其他音乐App停止播放。需要分别修改Android和iOS端的音频设置,允许混音播放。

Android端修改

调整音频属性和焦点请求逻辑,使用允许混音的焦点模式:

public class MyAudioOutput : IAudioServiceOutput
{
    public void GetAudioSetting()
    {
        var audioManager = (Android.Media.AudioManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.AudioService);
        
        // 配置适合音效的音频属性,支持混音
        var audioAttributes = new AudioAttributes.Builder()
            .SetUsage(AudioUsageKind.Game)
            .SetContentType(AudioContentType.Sonification)
            .Build();
        
        // 请求短暂音频焦点,允许其他音频继续播放(仅压低音量)
        var focusRequest = new AudioFocusRequest.Builder(AudioFocus.GainTransientMayDuck)
            .SetAudioAttributes(audioAttributes)
            .Build();
        
        audioManager.RequestAudioFocus(focusRequest);
        
        // 保持扬声器设置
        audioManager.Mode = Mode.Normal;
        audioManager.SpeakerphoneOn = true;
    }
}
  • AudioFocus.GainTransientMayDuck:表示仅短暂占用焦点,允许其他音频继续播放(系统会自动压低其他音乐音量,保证你的音效清晰可闻)
  • 如果需要其他音乐保持原音量,可尝试替换为AudioFocus.GainTransient,部分设备可能需要额外适配

iOS端修改

修改AVAudioSession的类别配置,添加混音选项:

public class MyAudioOutput : IAudioServiceOutput
{
    public void GetAudioSetting()
    {
        var session = AVAudioSession.SharedInstance();
        NSError error = null;
        
        // 设置播放类别并允许与其他音频混音
        session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.MixWithOthers, out error);
        if (error != null)
        {
            Console.WriteLine($"iOS音频会话错误:{error.LocalizedDescription}");
        }
        
        // 覆盖输出到扬声器
        session.OverrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, out error);
        if (error != null)
        {
            Console.WriteLine($"iOS扬声器设置错误:{error.LocalizedDescription}");
        }
        
        // 激活会话,不中断其他音频
        session.SetActive(true, AVAudioSessionActivationOptions.NotifyOthersOnDeactivation, out error);
        if (error != null)
        {
            Console.WriteLine($"iOS激活会话错误:{error.LocalizedDescription}");
        }
    }
}
  • AVAudioSessionCategoryOptions.MixWithOthers:核心配置,允许当前应用的音频与其他App的音频同时播放
  • 原代码未添加此选项,默认Playback类别会独占音频会话,导致其他音乐停止

额外检查

  • 确保SimpleAudioPlayer没有覆盖你的音频会话设置,部分库会默认使用独占模式,若仍有问题可查看其文档是否有混音相关配置
  • 测试时先启动Spotify/Deezer播放音乐,再打开你的应用触发音效,验证是否同时播放

内容的提问来源于stack exchange,提问作者hugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:35:50