一連のオーディオ リマインダーを再生し、他のアプリケーションで生成されたサウンドと適切に通信する 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)
部分的な回答でも非常に役立ちます。前もって感謝します。