iPhoneでアラームとか通話とかが割り込んできてアプリのオーディオが停止してしまうときの通知を受け取るにはAudioSessionでInterruption Callbackを登録するって感じなのですが、サンプルソースなどは以下のようなコードになってまして…
void rioInterruptionListener(void *inUserData, UInt32 inInterruption) { AudioUnit *remoteIO = (AudioUnit*)inUserData; if (inInterruption == kAudioSessionEndInterruption) { AudioSessionSetActive(true); AudioOutputUnitStart(*remoteIO); } if (inInterruption == kAudioSessionBeginInterruption) AudioOutputUnitStop(*remoteIO); }
自分のアプリに戻ってきたときにはこのコールバックが呼ばれて、kAudioSessionEndInterruptionがinInterruptionに来る事になっていますが、1つ例外があるようです。
iPod touchでホームボタンをダブルタップすると、ミュージックをコントロールできる小さいウィンドウが現れます。そこで再生を押すとオーディオの割り込み開始のkAudioSessionBeginInterruptionは来ますが、そのあと停止してウィンドウを閉じてもkAudioSessionEndInterruptionは来ません。
とりあえず、戻ってくるところはUIApplicationのapplicationDidBecomeActive:で処理しないといけなさそうです。