12

そのため、iOS 6 で実行されている私のアプリでは、すべてがオーディオで正常に動作しているようです。古い C API 形式を使用して、コールバックを使用して割り込みをキャッチします。via: のセットアップAudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self)は素晴らしかったです。ただし、iOS 7 SDK を使用すると、デバイスが通話を受信したときやアラームが鳴ったときに割り込みコールバックが呼び出されないようです。

いろいろ調べたところ、古い C API は廃止され、新しい AVAudioSession 関数に移行する必要があると聞きました。さらに読むと、AVAudioSession デリゲートは非推奨であり、NSNotificationforを使用しAVAudioSessionInterruptionNotificationて割り込みをキャッチし、必要な処理を行う必要があることが明らかになりました。

私にとっては、この通知が実際に発生することはないように思われるため、適切に中断されることはなく、通話が終了した後にすべての音声が壊れます。

私は次のように通知にサインアップします:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];

今のところ、このAudioInterruption:関数は起動されたことをログに記録するだけです。ログもブレークポイントもトリガーされていません。

明確にするために、最初はオーディオの再生と録音は正常に機能します。割り込みが発生した場合 (着信コールやアラームなど)、割り込み通知は発生しません。さらに周囲のコードが必要な場合は、お知らせください。

4

3 に答える 3

9

アプリケーションにAVCaptureSessionインスタンスがありますか?
その場合は、リンクされた質問に対して受け取ったのと同じ回答をお勧めします。 AVCaptureSessionインスタンスのusesApplicationAudioSessionプロパティにNO
設定してみてください。 これは、iOS 7 以降で使用できるプロパティです。以前の iOS バージョンでは、各AVCaptureSessionはプライベートAVAudioSessionを使用していました。iOS 7 以降、キャプチャ セッションは共有アプリケーションの AVAudioSession を利用します。 usesApplicationAudioSessionプロパティはデフォルトで有効になっているため、古い動作を維持したい場合は、設定して無効にする必要があります。

いいえ

これがあなたにとってもうまくいくことを願っています。

于 2014-01-17T21:55:50.157 に答える
-1

私にとっては、ユーザーが実際に再生ボタンを押したときにオーディオセッションをアクティブにし、オブザーバーを追加することで問題が解決しました。通知が発行されました。Apple doc がここでそれについて何か言っていると思います。

于 2016-11-30T17:20:09.387 に答える