開発者コンソール

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

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

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

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

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

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

ビデオを再生するアプリで想定される事項は、オーディオ専用アプリに対するものとは大きく異なります。

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

関連するAndroid開発者ページに記載されているAPIレベル22(Fire OS 5)、APIレベル25(Fire OS 6)、APIレベル28(Fire OS 7)向けの手順に従ってください。また、以下のAndroidドキュメントのガイドラインと手順も参照してください。

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

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

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

音声操作

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

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

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


Last updated: 2023年10月10日