我想为 iPhone 编写应用程序,它可以播放音频提醒序列,并与其他应用程序产生的声音进行良好的交流。
更具体地说,我想实现以下几点:
1. 每 10 秒播放一次声音提醒。(这是为了简化问题,在我的应用程序中有一个时间序列,指定何时播放提醒)
2. 声音应该在后台工作。
3.如果音乐播放应该暂停,我的应用程序应该产生音频提醒,然后音乐恢复。
4. 如果其他应用程序开始使用声音,我的提醒序列应该继续工作(例如,我的应用程序运行后开始播放音乐或来电)。
使用下面的代码,我能够实现第 1 点和第 2 点。但我无法实现如何同时实现第 3 点和第 4 点。
- (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 点)
即使是部分答案对我也很有帮助。提前致谢。