iOS アプリ (iOS > 5.0) を構築しようとしています。ユーザーが設定したタイマーが終了すると、音楽ファイルを再生する必要があります。これまでに行った場合の私のセットアップは次のとおりです。
- AVプレイヤーを使っています
- plist の Background Modes を「アプリがオーディオを再生する」に設定しました
私のappDelegateには次のものがあります:
NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
曲をセットで演奏する前に:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; [[AVAudioSession sharedInstance] setActive:YES error:&sessionError];
「playerItemDidPlayToEnd」でアプリケーションに通知し、プレーヤーを停止して、music.app などの他のアプリに再びアクティブになるように指示します。
_avPlayer = nil; NSError *sessionError = nil; [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:&sessionError];
これはうまくいきます。音楽アプリをバックグラウンドで再生できます。私のアプリは、音楽アプリがフェードアウトする曲の再生を開始します。私の曲が再生され、それが終了した場合、音楽アプリは引き続き再生されます。ただし、アプリがバックグラウンドにない限り。
バックグラウンドでエラーが発生します:
エラー ドメイン = NSOSStatusErrorDomain コード = 560161140 「操作を完了できませんでした。(OSStatus エラー 560161140。)」
バックグラウンドでの再生 (カスタム イベント) と、fe music.app とバックグラウンドでのアプリの切り替えの両方の組み合わせができない可能性はありますか?
ここに私のプレーヤーモデルのコードがあります: http://pastie.org/4830995