オーディオフォーカスの管理について


オーディオフォーカスの管理について

オーディオを再生するアプリは、ユーザーフレンドリーな形でほかのアプリやサービスと連携するよう、慎重に設計する必要があります。Androidでは、複数のアプリ間でオーディオ再生を管理するために、オーディオフォーカスという概念を定めています。このドキュメントでは、Fire TVにおけるオーディオフォーカスと関連イベントの管理方法について説明します。

オーディオフォーカスの複雑さ

オーディオフォーカスの処理は想像以上に複雑です。アプリの開発にあたり、特に以下の点について検討してください。

  • オーディオの再生をフォアグラウンドで実行するか、バックグラウンドで実行するか
  • 再生を停止する必要があるときに、ほかのアプリにどのように通知するか
  • ほかのアプリが再生を開始したときにどのように対応するか
  • 受信したマルチメディアイベント(一時停止、早送りなど)をいつどのように処理するか
  • システムの通知や短時間のオーディオの中断などをどのように処理するか
  • 音声検索割り込みにどう対応するか
  • 音声制御ソリューションとどのように相互作用するか
  • リソースおよびWakeLockの保持をいつ許可するか

ビデオを再生するアプリに対する期待は、オーディオ専用アプリに対するものと大きく異なります。

マルチメディアアプリのドキュメント

関連Android開発者ページに記載されているAPIレベル22(Fire OS 5)および25(Fire OS 6)向けの手順に従ってください。以下の開発者ページで説明されている動作の実装について理解する必要があります。

オーディオフォーカスの処理

アプリの開発にあたり、オーディオフォーカスイベントの要件に記載されているすべての要件に従い、以下に注意してください。

  • 再生時間をオーディオフォーカスを保持する時間と完全に一致させ、MediaSessionを有効にします。これに伴い、再生終了直後にフォーカスリクエストを中止する必要もあります。
  • すべてのオーディオフォーカス変更コールバックは、Android 8.0以前のオーディオフォーカスの説明に従って処理する必要があります。
  • アプリがバックグラウンドで実行されている場合、(引き続きオーディオフォーカスも処理しながら)マルチメディアイベントを処理する必要があります。
  • オーディオフォーカス喪失イベントを受け取ったら、フォーカスが再取得されるまでマルチメディアイベントの処理を停止させる必要があります。
  • フォーカスの永久損失は、アプリがフォーカスを再取得しないことを意味するため、すべてのリソースを解放する必要があります。
  • 以前のリクエストを中止しないままオーディオフォーカスを複数回リクエストしないでください(フォーカススタックに複数回登録されるのを避けるため)。
  • ダッキングは、ほかのアプリ、音声検索の応答などに影響が出ない音量(元の音量の30~40%など)に設定する必要があります。

音声操作

ユーザーがリモコンの [マイク] ボタンを押すか(近接)、マイク付きデバイスがウェイクワードを認識すると(遠隔)、システム全体の音声機能が起動します。この機能をオーバーライドすることはできません。オーディオフォーカス(AUDIOFOCUS_LOSS_TRANSIENT)とアクティビティライフサイクルイベント(onPause())の両方が送信されます。

一般的に、音声操作が発生した場合、アプリは一時停止(または少なくとも音声をミュート)する必要があります。また、Androidによって許可された任意の順番でイベントを受信できる状態であることが必要です。ユーザーはAlexaに新しいアプリを起動するよう指示したり、サウンドシステムのオンとオフを切り替えたりすることができます。その結果、再生の一時停止中、オーディオ機能が変わることがあります。再生を続ける前に、これらの変更に適切に対応する必要があります。

MediaSessionインターフェイスを正しく実装しているアプリは、音声コマンドによって制御できます。音声による制御を有効にする方法の詳細については、アプリおよびコンテンツの音声対応についてを参照してください。Fire TVの音声検索では、検索結果にアプリのコンテンツを含めることもできます。この機能については、カタログとFire TVの統合を参照してください。