应用程序处于后台模式时无法播放声音

时间:2014-02-14 08:13:38

标签: ios iphone objective-c ios7 avaudioplayer

在Info.plist中,我添加了:

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
    <string>location</string>
</array>
...

我加载声音如下:

NSURL *urlFail = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/criticalSound.wav", [[NSBundle mainBundle] resourcePath]]];
                    NSError *error;
                    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:urlFail error:&error];
                    [audioPlayer setDelegate:self];
                    audioPlayer.numberOfLoops = 0;
                    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
                    [audioPlayer setVolume:1.0];
                    if (audioPlayer == nil){
                    }else{
                        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
                        [[AVAudioSession sharedInstance] setActive: YES error: nil];
                        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
                        musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
                        if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying)
                        {
                            self.wasMusicAppOn = YES;
                            [musicPlayer pause];
                        }else{
                            self.wasMusicAppOn = NO;
                        }
                        [audioPlayer play];
                    }

当应用处于活动状态时,此功能正常 但是当应用程序处于后台并且不时(例如当用户通过500米时)我有一个位置更新我应该播放这个声音。
所以我把这个代码放在那里。

无论如何问题是当应用程序在前台时播放声音但在背景中时它不起作用 我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

据我所知,你必须在进入后台时播放声音才能继续在后台播放声音。

此外,AVAudioSessionCategoryAmbient的说明指出“您的音频通过屏幕锁定和静音开关(在iPhone上称为响铃/静音开关)进行静音”。

答案 1 :(得分:0)

您需要在plist文件中进行一些更改。

1)将所需的背景模式设置为App播放音频

2)设置应用程序不在后台运行到YES。

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

然后,您需要在AppDelegate中编写这么多代码

现在,您可以在手机屏幕锁定或后台轻松运行音频。

对我来说很好。 :)

有关详情,请参阅Playing Audio in background modeAudio Session Programming Guide