7

AVAudioPlayer を使用して音楽を再生しています (バックグラウンドがサポートされています)。私の質問は、音楽を聴いているときに誰かに電話をかけたい場合、通話後に再開するにはどうすればよいですか? AVAudioPlayer のデリゲート メソッドを実装しました。

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)thePlayer {
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [self.player play];
}

しかし、これでは音楽を続けることはできません。

AVAudioSessionDelegate メソッドも使用しようとしました (試してみました):

- (void)viewDidLoad {
    [[AVAudioSession sharedInstance] setDelegate:self];
}

- (void)endInterruption
{
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [self.player play];
}

ただし、これによって音楽が再開されることはありません。この問題を解決する方法についてのアイデアはありますか?

4

3 に答える 3

1

iOS では、既にバックグラウンドにあるアプリはオーディオの再生を開始できません。フォアグラウンド アプリがオーディオ セッションを制御したためにアプリのオーディオが停止した場合、それを元に戻す方法は (現在) ありません。

于 2011-10-29T19:32:46.097 に答える
1

あなたのコードから奇妙なのは、AVAudioPlayerを使用していると言っているのに、なぜAVAudioSessionDelegateを実装するのですか?

また、デリゲート メソッドの実装が不適切です。ドキュメントを見る

AVAudioPlayerDelegate から:

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags

したがって、このように実装してみてください。適切に機能するはずです

于 2011-10-27T04:52:34.467 に答える
1

再開できます。オーディオ セッションが終了したら、私のアプリがオーディオ セッションを無効にすることを他のアプリに通知する必要があり、それを利用できるようになります。次のコードを使用します。

[[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
于 2014-01-29T07:39:20.003 に答える