iPhone と iPad の両方でラジオ アプリを作成していますが、オーディオの一時停止と再生を中断して処理するときに、奇妙な動作が発生します。私は AVAudioSessionDelegate メソッドbeginInterruption
とAVPlayerendInterruption
をそれぞれ使用pause
しplay
ています。以下は関連するplay
コードです。
現在、次の状況が一貫して発生しているようです。
- iPadの場合: 割り込み (Facetime 通話) を強制する
beginInterruption
と、期待どおりに呼び出され、再生が停止します。中断が停止するendInterruption
と、期待どおりに呼び出され、期待どおりに再生が再開されます。 - iPhoneの場合: 再生ボタンと一時停止ボタンを押すと、 と がトリガーされ
pause
、 と とplay
まったく同じにbeginInterruption
なりendInterruption
ます。再生は期待どおりに動作します。 - iPhone の場合: (電話をかけることによって) 中断を強制すると、予期したとおりに通話が行わ
endInterruption
れ、予期したとおりに再生が一時停止します。ただし、割り込みが終了するbeginInterruption
と、期待どおりにplay
呼び出され、期待どおりに呼び出され、実際に[self.player play]
は行に到達して実行されますが、再生は再開されません! 何も聞こえません。
上記の状況 3 は非常に奇妙なので、何か見落としているのではないかと思います。何か案は?
Play
コード
- (void)play {
NSError* error = nil;
AVKeyValueStatus keyStatus = [currentAsset statusOfValueForKey:@"tracks" error:&error];
if(error){
DLog(@"Error %@", [error localizedDescription]);
}
else {
DLog(@"Current Key Status: %i", keyStatus);
if(keyStatus == AVKeyValueStatusLoaded){
DLog(@"Continue playing source: %@", self.source);
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
if (error) {
DLog(@"Error during play while setting AVAudioSessionCategory: %@", [error localizedDescription]);
}
[[AVAudioSession sharedInstance] setActive:YES error:&error];
if (error) {
DLog(@"Error during play while setting AVAudioSessionCategory: %@", [error localizedDescription]);
}
[[AVAudioSession sharedInstance] setDelegate:self];
if(backgroundTaskID != UIBackgroundTaskInvalid){
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID];
}
backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[self.player play];
[self setStatus:kNPOMediaPlayerStatusPlaying];
}
else {
DLog(@"PlaySource: %@", self.source);
[self playSource:self.source];
}
}}