iOS AVAudioPlayer 让其他应用的背景音乐停止

Posted

技术标签:

【中文标题】iOS AVAudioPlayer 让其他应用的背景音乐停止【英文标题】:iOS AVAudioPlayer makes other app's background music stopped 【发布时间】:2012-07-12 02:35:09 【问题描述】:

我有一个需要播放声音的锻炼应用程序。我使用 AVAudioPlayer 播放声音。 但是当音频开始播放时,来自另一个应用(广播流应用)的背景音乐会关闭。

如何让它不打断背景音乐?因为我希望用户在锻炼时听到音乐。

谢谢。

【问题讨论】:

iPhone AVAudioPlayer stopping background music 的可能重复项 您需要使用不同类型的音频会话 【参考方案1】:

在使用 AVAudioPlayer 的地方可以使用以下代码:

    // Set Audiosession
    NSError *sessionError = nil;
   [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&sessionError];
   [[AVAudioSession sharedInstance] setActive:YES error:&sessionError];

如果你想设置一个委托,你可以添加这行代码:

   [[AVAudioSession sharedInstance] setDelegate:self];

【讨论】:

你真的需要设置委托吗?设置类别应该足够了。 我已经测试了代码,只需要调用 setCategory。相应地更改了示例代码。 当其他应用程序的音频在后台播放时,我的应用程序会崩溃,原因是:'required condition is false: _engine->IsRunning()'。这解决了这个问题。 如果我使用播放类别,有什么方法可以防止在我的应用打开时停止正在播放的其他音频? @vikzilla 检查这个答案***.com/a/25152431。它可能会帮助你。【参考方案2】:

就我而言,我希望以较低的音量播放背景音频,因为我的应用播放的声音更像是一个警报。我用这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // prevents our app from stopping other audio,
    // e.g. music, podcats, etc. that may be playing when launched
    // our audio will be played at a higher volume
    // and the background audio will "duck" until done
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryMultiRoute 
                                     withOptions:AVAudioSessionCategoryOptionDuckOthers
                                           error:nil];

【讨论】:

【参考方案3】:

根据 SujithPt 的回答,这里的 swift 是一样的:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)

【讨论】:

【参考方案4】:

对于 Swift 4.2

import AVFoundation

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 

    do 
        try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: AVAudioSession.CategoryOptions.mixWithOthers)
     catch let error 
        print(error.localizedDescription)
    

    return true

【讨论】:

【参考方案5】:

对于 Swift 2.2,在播放或准备播放之前将其添加到任何位置:

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

【讨论】:

以上是关于iOS AVAudioPlayer 让其他应用的背景音乐停止的主要内容,如果未能解决你的问题,请参考以下文章

iOS - AVAudioPlayer 在后台不会继续播放下一首歌曲

iOS使用虚拟AVAudioPlayer从铃声切换到系统音量

iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPN

iOS 7:使用 AVAudioPlayer 的简单音频控件?

iOS:当前 AVAudioPlayer 的 AudioUnit

AVAudioPlayer 后台任务不工作 [iOS]