音声フォーカスの改善

音声フォーカスを使用しているメディアアプリやゲームアプリは、フォーカスを失った後に音声を再生すべきではありません。Android 12 以降、フレームワークによりこの動作が強制されます。あるアプリが音声フォーカスをリクエストし、別のアプリがフォーカスを保持して再生している場合、フレームワークは再生中のアプリを強制的にフェードアウトさせます。フェードアウトを追加することで、アプリ間の遷移が滑らかになります。

このフェードアウトの動作は、次の条件を満たす場合に発生します。

オーディオ システムが 1 つ目のアプリをフェードアウトさせます。フェードアウトが終了すると、1 つ目のアプリはフォーカス喪失を通知されます。1 つ目のアプリが音声フォーカスを再度リクエストするまで、プレーヤーはミュート状態のままになります。

既存の音声フォーカスの動作

音声フォーカスの切り替えを伴う以下のようなケースについても把握しておく必要があります。

自動ダッキング

自動ダッキング(あるアプリの音声レベルを一時的に下げて、別のアプリの音声が明瞭に聞こえるようにする機能)は、Android 8 で導入されました。

フレームワークによりダッキングの実装が行われるため、デベロッパーがアプリにダッキングを実装する必要はありません。

自動ダッキングは、音声通知が現在再生しているアプリからフォーカスを取得した場合にも発生します。通知の再生開始はダッキング ランプの最後と同期されます。

自動ダッキングは、次の条件を満たす場合に発生します。

  • 1 つ目の(現在再生している)アプリ:

  • 2 つ目のアプリが、[AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK](/reference/android/media/AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK)を使用して音声フォーカスをリクエストしている。

オーディオ システムは、2 つ目のアプリがフォーカスを保持している間、1 つ目のアプリのすべてのアクティブなプレーヤーをダッキングします。2 つ目のアプリがフォーカスを破棄すると、1 つ目のアプリのダッキングが解除されます。1 つ目のアプリはフォーカスの喪失時に通知を受けないため、何もする必要はありません。

ユーザーが話し声のコンテンツを聞いている場合、プログラムの一部を聞き逃す可能性があるため、自動ダッキングは行われません(運転ルートの再生中など)。

着信時のミュート

一部のアプリは正常に動作せず、通話中も再生を続行します。そのため、ユーザーは通話が聞こえるようにするために、問題のアプリを見つけてミュートするか、終了する必要があります。この機能を使用すると、着信時にアプリの再生が継続されることはなくなります。この機能は、アプリが次の条件を満たしている場合に呼び出されます。

  • 用途が AudioAttributes.USAGE_MEDIA または AudioAttributes.USAGE_GAME である
  • 音声フォーカス(あらゆるフォーカス ゲイン)を正常にリクエストし、音声を再生している

通話中にアプリが再生を続けると、通話が終了するまで再生はミュートされます。ただし、通話中にアプリが再生を開始した場合、ユーザーが意図した操作と見なされるため、そのプレーヤーはミュートされません。