AudioSession が初期化された後に AudioSessionInterruptionListener を変更または無効にする方法が必要です。
理由は次のとおりです。一部のユース ケースでは、オーディオ録音を使用してアプリをバックグラウンドで実行する必要があるため、オーディオ バックグラウンド モードが設定されています。これは機能します。呼び出しやその他の割り込みが発生した場合、他のオブジェクトに記録を完全に停止するように通知する必要があります-これは機能します。次に、呼び出した AudioSession でアプリが完了すると、AudioSessionSetActive(false);
これが機能します (セッションがアクティブな状態でアプリがバックグラウンドに送信されると、上部に赤いバーが表示されます。セッションが非アクティブな場合、赤いバーは表示されません。ただし、技術的には、アプリはまだ「アクティブな」バックグラウンド モードになっていると思います)。
でも!録音が完了し、アプリがバックグラウンドに送信され、オーディオ セッションが既に非アクティブ化されている場合、通話が着信した場合、または Siri がアクティブ化された場合でも、アプリは AudioSessionInterruptionListener コールバックを受け取ります。はい、コードを追加して、アプリが現在割り込みに応答しているかどうかをテストできます。ただし、これはバグだと思います。AudioSession を無効にすると、割り込みの呼び出しが停止するはずです。実際、すべてのオーディオ セッション/プロパティ リスナーの呼び出しが停止するはずです。
AudioSessionInterruptionListener を変更または無効にするにはどうすればよいですか? または、これを尋ねる別の方法かもしれませんが、アプリが必要のないときにバックグラウンド モードを「使用」しないようにするにはどうすればよいですか?
追加情報
さて、iOS 6 では AudioSession 割り込み用の NSNotifications があるようです:AVAudioSessionDidBeginInterruptionNotification
とAVAudioSessionDidEndInterruptionNotification
. ただし、iOS 5.1 以降をサポートしているため、これは役に立ちません。そして、私が新しい通知を見つけた同じドキュメントは、Obj-C インターフェイス AVAudioSession のデリゲート プロパティが (IOS 6 で) 減価償却されていることを示しているため、おそらくそれを使用してデリゲートを設定/変更するべきではありません (そして Obj を取得します)。 -C 割り込みコールバック)。
考えられる回避策は、iOS バージョンをテストし、6.0 未満でデリゲートを設定および設定解除し、6.0 以降で NSNotifications をリッスンすることだと思います (これは 6.0 未満では表示されないため、壊れてはなりません)。ただし、これはおかしなことのようです。