Audio Session Cookbookには、「Checking if Other Audio is Playing During App Launch」に関するセクションがあります。
私は MonoTouch を使用しています (ただし、Objective-C の回答を自由に提供してください。API は同じです)、そのドキュメントのコードは次のようになります。
bool otherAudioPlaying = AudioSession.OtherAudioIsPlaying;
if(otherAudioPlaying)
AudioSession.Category = AudioSessionCategory.AmbientSound;
else
AudioSession.Category = AudioSessionCategory.SoloAmbientSound;
結果として、私のアプリが iPod の音楽を再生している状態で開始された場合、その iPod の音楽が再生され続け、ハードウェア オーディオ デコーダ (これは必要ありません) を使用できなくなります。アプリの起動時に iPod の音楽が再生されていない場合は、ハードウェア デコーダを使用できます。
次に、 の値を使用しotherAudioPlaying
て、自分の音楽の再生を開始するかどうかを決定できます。
マルチタスクをサポートしていない古いオペレーティング システムでも問題なく動作するようになりました。しかし、マルチタスクを使用すると、ユーザーはアプリを離れて (バックグラウンドで)、iPod で音楽の再生を開始し、アプリに再び入ることができます。その後、iPod の音楽が停止し、私の音楽が再び再生されます。
私が望んでいるのは、アプリケーションがフォアグラウンドに戻ったときに iPod の音楽を再生し続けることです。アプリケーションがバックグラウンドのときに自分の音楽が再生されていても (ハードウェアデコーダを使用していても)。
(逆に、アプリケーションがバックグラウンドで音楽が再生されていない場合、アプリケーションが戻ったときに音楽の再生を開始できるかどうかを検出したいと考えています)。
これどうやってするの?(そしてできれば、オーディオを突然切断することなく、通常発生する素敵なフェードアウトを維持します。)
編集: また、メイン スレッドからすべてのオーディオ作業を行っていることも指摘しておく必要があります。