当应用程序在后台iOS中声音

我试图在我的应用程序在后台播放声音。 我使用AVAudioPlayer ,它在应用程序处于活动状态时正常工作,但在后台AVAudioPlayer不能播放任何内容,我不知道该怎么办。

我以为我可以使用UILocalNotification ,但它显示和警报在锁屏,我不想要它。


感谢您的回答。 我还有一个疑问。 如果我创build了这个音乐会,而且我正在播放音乐,那么系统会同时混合使用这两个音乐。

我应该怎么做,以减lessiPod音乐音量将我的应用程序声音播放(3秒),并像AppStore中的大多数正在运行的应用程序完成后再次增加。 (也在后台)

这是我在AppDelegate中的代码

 //Creamos la sesión de audio [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

在我看来,当我想要发挥声音:

 -(void)avisosound{ // AudioSessionSetActive(YES); NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/sound.wav", [[NSBundle mainBundle] resourcePath]]]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; if (audioPlayer == nil){ } else{ [audioPlayer play]; } AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } 

但是当我播放声音时,iPod音乐停止。

你需要在plist文件中做一些修改。

  1. 所需的背景模式设置为App播放audio
  2. 设置应用程序不会在后台运行YES

然后,您需要在AppDelegate中编写以下代码:

  NSError *setCategoryErr = nil; NSError *activationErr = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr]; [[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 

现在,您可以轻松地在电话屏幕locking或您的应用程序在后台运行audio。

以下内容告诉系统即使在iPhone屏幕locking时仍继续播放audio:

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:NULL]; 

(大多数时候你把这个放在你的didFinishLaunchingWithOptions 。)

并告诉系统在您的应用程序处于后台时播放audio,添加UIBackgroundModes并将其设置为plist中的audio

(任何需要播放audio的前台应用程序将优先于这些设置和应用程序的声音播放)。

要添加“ducking”,要在audio播放时降低其他audio的音量,您需要实现kAudioSessionProperty_OtherMixableAudioShouldDuck。 在audio会话编程指南中查找。

要在后台播放声音(假设您的应用已经设置了正确的背景模式),您的应用必须在前台启动声音,而不是停止播放声音。 最简单的方法是使用audio队列API或RemoteIOaudio单元。