3

iPhone と iPad の両方でラジオ アプリを作成していますが、オーディオの一時停止と再生を中断して処理するときに、奇妙な動作が発生します。私は AVAudioSessionDelegate メソッドbeginInterruptionとAVPlayerendInterruptionをそれぞれ使用pauseplayています。以下は関連するplayコードです。

現在、次の状況が一貫して発生しているようです。

  1. iPadの場合: 割り込み (Facetime 通話) を強制するbeginInterruptionと、期待どおりに呼び出され、再生が停止します。中断が停止するendInterruptionと、期待どおりに呼び出され、期待どおりに再生が再開されます。
  2. iPhoneの場合: 再生ボタンと一時停止ボタンを押すと、 と がトリガーされpause、 と とplayまったく同じにbeginInterruptionなりendInterruptionます。再生は期待どおりに動作します。
  3. 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];
    }
}}
4

2 に答える 2

1

これは iOS の既知のバグであることが判明しており、アプリケーションのDidBecomeActive で beginInterruption を処理するための注意深い回避策が必要です。悲しいことに、私は別の解決策を見つけることができませんでした。

于 2012-12-12T13:03:05.547 に答える