iOS の StackOverflow でのバックグラウンド ミュージックの再生に関して、多くの質問があります。すべてのエッジ ケースを完全に調査するものはありません。この質問の目的は、iOS のバックグラウンド オーディオに関する質問の最後の言葉になることです。
定義と仮定
すべてのコード、質問、および例はios5を参照しています。
"background" — ユーザーがホーム ボタンまたは電源ボタンを押したとき (デバイスがロック画面を表示するとき) にアプリが置かれる状態。マルチタスク スイッチャーまたは iPad のマルチタスク ジェスチャを使用して、アプリをバックグラウンドにすることもできます。
"audio" — AudioQueue (AVAudioPlayer を含む) を使用して再生されるオーディオ
前提条件
私が理解しているように、アプリがバックグラウンドでオーディオを再生するには、2 つの要件があります。
- に設定
UIBackgroundModes
_audio
Info.plist
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
要件
私のユースケースは、バックグラウンドで比較的長いオーディオ (音楽) を再生することです。何百ものトラックが存在する可能性があり、アプリはそれらを順番に再生します。オーディオは無期限に再生されると見なすことができます。
アプリは、再生を一時停止することで中断を処理します。
質問
私はさまざまな成功を収めました:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:...];
バックグラウンドでオーディオを再生できるようにします。しかし、それが必要かどうか、およびそれが次のようにどのように異なるかについて、私は混乱しています:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
エッジケース
中断。の代理人になって、音声の中断(電話など)の通知を受け取るように登録すると、
AVAudioPlayer
. たとえば、中断の開始時に音声を一時停止または停止し、中断の終了時に再開する場合、中断が 10 分 (バックグラウンド タスクの完了に許可される最大時間) を超えた場合、アプリは中断されますか?以下を使用しているときに Lock または Home が呼び出されると、シミュレーターは音声を停止します。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
ただし、これはデバイス上で機能します。これは既知の問題ですか?