3

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 の音楽を再生し続けることです。アプリケーションがバックグラウンドのときに自分の音楽が再生されていても (ハードウェアデコーダを使用していても)。

(逆に、アプリケーションがバックグラウンドで音楽が再生されていない場合、アプリケーションが戻ったときに音楽の再生を開始できるかどうかを検出したいと考えています)。

これどうやってするの?(そしてできれば、オーディオを突然切断することなく、通常発生する素敵なフェードアウトを維持します。)

編集: また、メイン スレッドからすべてのオーディオ作業を行っていることも指摘しておく必要があります。

4

2 に答える 2

0

refulgentis の回答に関する最後のコメントについては、applicationWillResignActive で音楽を一時停止し、状態保存操作と applicationDidEnterBackground のクリーンアップを残すことができます。これは、バックグラウンド遷移状態中の奇妙な動作を回避するのに適している場合があります。

于 2010-10-31T16:22:03.870 に答える
0

アプリのデリゲート マルチタスク メッセージに実装するだけに気をつけてみませんか? バックグラウンドでオーディオを一時停止し (必要に応じて現在の再生位置を保存します)、アプリケーションがフォーカスを再開したときにオーディオをスピンアップします。

もう少し明確にするために: デリゲートで applicationDidEnterBackground: に応答してオーディオ プレーヤーの状態をリセットし、applicationWillEnterForeground: に応答して現在の方法に戻します。また、オーディオ再生を設定するオブジェクトを NSNotificationCenter を介して UIApplicationWillEnterBackgroundNotification/UIApplicationWillEnterForegroundNotification に応答させることもできます。これは、アプリ デリゲート クラスからアプリがバックグラウンドで正確に行うことを抽象化することを犠牲にして、おそらく少し簡単になるでしょう。

于 2010-10-25T00:35:14.240 に答える