2011-06-19 15 views
1

マルチタスキングをサポートするゲーム中に、バックグラウンドで音楽を再生するアプリがあります。ホームボタンを押すと、applicationWillResignActiveに対してアクションが呼び出されます。これにより、一時停止画面がプルアップされ、ゲームが一時停止されます。しかし、私がゲームで音楽を実装したとき、状況は間違っていました。私はAVAudioPlayerを使って私のBGMを演奏しました。 applicationWillResignActiveが呼び出されると、一時停止画面を表示するのと同じアクションで、音楽が一時停止するように指示されます。しかし、マルチタスキングを介してアプリに戻ると、一時停止画面はまだ表示されますが、音楽もまだ再生されています。私は音楽を止めるために数多くの場所で試しましたが、止めることを拒否します。ビューを切り替えた後でも、音楽は引き続き再生されます。完全に反応しません。マルチタスク後のAVAudioPlayerの再生

これは非常にイライラです。助けてください!

答えて

3

今日はまったく同じ問題を抱えています。 私は最終的に回避策を持っています。
#stopメソッドはハードウェアを解放しますが、現在の再生位置を忘れません。
#playを再度呼び出すと、必要に応じて再生を再開できます。

私の以前のコードはでした:もちろん

[player pause]; 
... 
if ([player isPaused]) { [player play]; } 

これは動作しませんでしたし、アプリがバックフォアグラウンドに入って来た後、あなたが経験しているとして再生は喜んで、再開しました。

今、私はこのようなものがあります:

self.playbackSuspended = YES; 
[player stop]; 
... 
if (self.playbackSuspended) { [player play]; } 

ハックが、それは動作します。唯一の欠点は、#prepareToPlayが再生ハードウェア、リバッファなどの所有権を取り戻すために暗黙的に呼び出され、再生が遅くなる可能性があることです。

また、実装によっては、上記のハッキングの後に電話などの割り込み処理が中断することがあります。電話の通話中断が正しく動作するため、上記のようなハッキングによって、共有コードが混乱状態になり、割り込みの受け渡しが行われる可能性があります。

関連する問題