Ios 在后台播放一系列声音提醒,暂停音乐,不被其他声音停止

Ios 在后台播放一系列声音提醒,暂停音乐,不被其他声音停止,ios,audio,avaudioplayer,avaudiosession,Ios,Audio,Avaudioplayer,Avaudiosession,我想为iPhone编写一个应用程序,它可以播放音频提醒序列,并与其他应用程序产生的声音进行良好的通信 更具体地说,我希望实现以下几点: 1.每10秒播放一次声音提醒。这是为了简化问题,在我的应用程序中有一个时间-时刻序列,它指定何时播放提醒 2.声音应该在背景中起作用。 3.如果播放音乐,它应该暂停,我的应用程序应该产生音频提醒,然后音乐继续。 4.如果其他应用程序开始使用声音,我的提醒序列应继续工作,例如音乐启动或在我的应用程序运行后来电 使用下面的代码,我能够实现第1点。二,。但我不知道如何

我想为iPhone编写一个应用程序,它可以播放音频提醒序列,并与其他应用程序产生的声音进行良好的通信

更具体地说,我希望实现以下几点: 1.每10秒播放一次声音提醒。这是为了简化问题,在我的应用程序中有一个时间-时刻序列,它指定何时播放提醒 2.声音应该在背景中起作用。 3.如果播放音乐,它应该暂停,我的应用程序应该产生音频提醒,然后音乐继续。 4.如果其他应用程序开始使用声音,我的提醒序列应继续工作,例如音乐启动或在我的应用程序运行后来电

使用下面的代码,我能够实现第1点。二,。但我不知道如何实现3。四,。同时,

- (void)viewDidLoad
{
    [super viewDidLoad];
    audioSession = [AVAudioSession sharedInstance];
}

// Following function is used to start reproducing sounds and also called
// for the next sounds
- (IBAction)soundPlayShort:(id)sender
{
    NSURL * url = @"reminder sound url here";

    // soundPlayer is defined in .h file as AVAudioPlayer
    if (soundPlayer == nil) {
       // initialize soundPlayer
       soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
       soundPlayer.delegate = self;
    }
    [soundPlayer playAtTime:soundPlayer.deviceCurrentTime + 10];
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];    
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [self soundPlayShort:self];
}
如果我按照下面的代码更新audioPlayerDidFinishPlaying,其他声音将在第3点恢复,但序列中的下一个提醒将不再调用与第2点相关的任何声音

- (void)restoreOtherSounds
{
    [audioSession setActive:NO 
        withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil];
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{

    [self restoreOtherSounds];
    [self soundPlayShort:self];
}
我还没有意识到如何恢复提醒顺序,例如在来电后。第4点


即使是部分答案也会对我很有帮助。提前感谢。

与第2点相关,在soundPlayShort中初始化AVAudioPlayer之前,请尝试将音频会话设置为活动状态:

[[AVAudioSession sharedInstance]设置活动:是错误:无]