我想爲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)
即使部分答案可能對我很有幫助。提前致謝。