如何让我的IOS应用程序在后台永久播放音乐?

3
我想写一个iOS音乐播放器应用程序,在后台循环播放音乐。我不希望音乐停止。此外,我想运行一个定时器,每隔一段时间执行更新,可能会改变播放的音乐。
但是,当我尝试编写这个应用程序时,音乐最终会在一段时间后停止播放。另外,我注意到iTunes播放器也有相同的行为。如果我将iTunes设置为无限循环某首歌曲,并让它播放,在几小时内,音乐将停止。
我已经为我的应用程序设置了“音频”后台执行,并且我有以下代码来开始播放音频:
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with:AVAudioSessionCategoryOptions.mixWithOthers)  
try AVAudioSession.sharedInstance().setActive(true)  
let player = try AVAudioPlayer(contentsOf: sound)  
player.numberOfLoops = -1  
player.prepareToPlay()  
player.delegate = self  
player.play()  

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {  
  player.play()  
}  

为什么iOS会强制关闭我的应用程序,导致音乐停止播放和计时器停止运行?

你能否检查一下是否出现了错误。阅读苹果文档,如果另一个活动的音频会话比你的优先级更高(例如,电话),并且两个音频会话都不允许混合,则尝试激活你的音频会话将失败。停用正在运行音频对象的音频会话将停止运行的音频对象,停用该会话,并返回AVAudioSessionErrorCodeIsBusy错误。 - Todor Brachkov
你的应用程序中的音频有时会暂停或应用程序被杀死吗?因为YouTube Red具有在后台永久播放的功能,所以我认为我们的应用程序也应该可以这样做。但是,正如@todor所提到的,当另一个音频(例如来电)出现时,它会优先处理。 - Karthick Ramesh
我已将代码设置为混合。另外,即使手机什么也不做只播放音乐,iOS也会终止应用程序。 - gregm
@gregm,我们如何在打开我们的应用程序并且我们的应用程序也使用AVAudioPlayer或AudioServicesCreateSystemSoundID时允许从后台同时播放来自任何音乐应用程序的音乐? - Ankur Patel
@gregm 当我打开我的应用程序时,背景应用程序的音乐停止了。 以下解决方案对我无效[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 大家有什么建议吗?当我们不使用任何AVAudioPlayer或AudioServicesCreateSystemSoundID时,上述解决方案是有效的。 - Ankur Patel
1个回答

2

2
系统音乐播放器有何不同? - gregm
1
AVAudioSession被附加到您的应用程序中。iOS不允许后台执行,除非是为了播放音乐。系统音乐播放器由iOS维护。 - Dharay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接