概要

ブロードキャスト ラジオ スタックは、図 1 に示すコンポーネントで構成されています。

ブロードキャスト ラジオ アーキテクチャ
図 1. ブロードキャスト ラジオ アーキテクチャ。

ラジオ リファレンス アプリ

ラジオの制御を実装する方法について詳しくは、ラジオの制御の実装をご覧ください。

Java ラジオアプリのサンプル(packages/apps/Car/Radio)はリファレンス実装として機能します。アプリサービスは、サービスの開始時に、ラジオ チューナーを開くようラジオ マネージャーにリクエストします。これにより、アプリはラジオ チューナーにリクエストを送信して、特定のラジオ放送局や周波数にチューニングするか、次に利用可能なラジオ放送局をシークすることができます。アプリは、ラジオのラジオ マネージャーとラジオ チューナーから、現在の番組情報、ラジオ番組リスト、構成、ベンダー定義パラメータなどに関する更新情報を受け取ります。リファレンス ラジオアプリは AM ラジオと FM ラジオのみに対応しています。OEM は、必要に応じてラジオアプリを変更または交換できます。

ラジオ マネージャー

アプリがラジオ マネージャーにチューナーを開くようリクエストすると、ラジオ マネージャー(frameworks/base/core/java/android/hardware/radio/RadioManager.java)はブロードキャスト ラジオ サービス(BRS)にチューナー セッションを開くようリクエストします。次に、セッションをラジオ チューナー(frameworks/base/core/java/android/hardware/radio/RadioTuner.java)にラップし、これがアプリに返されます。ラジオ チューナーは、ラジオアプリから呼び出すことができる API(選局、ステップ、キャンセルなど)を定義して、BRS にリクエストを送信します。ラジオ チューナーで定義されたコールバック メソッド(RadioTuner.Callback)は、ブロードキャスト ラジオ HAL に関する更新情報(現在の番組情報、番組リスト、ベンダー定義パラメータなど)を BRS からアプリに送信します。

ブロードキャスト ラジオ サービス

ブロードキャスト ラジオ サービス(frameworks/base/services/core/java/com/android/server/broadcastradio)は、ブロードキャスト ラジオ HAL のクライアント サービスです。BRS は、複数のラジオ マネージャーとブロードキャスト ラジオ HAL との調整を行います。BRS は、HAL インターフェース定義言語(HIDL)Android インターフェース定義言語(AIDL)のブロードキャスト ラジオ HAL をサポートしています。BRS は、AIDL HAL サービスが存在する場合は AIDL HAL にリンクします。存在しない場合は、HIDL HAL にリンクします。BRS は、利用可能な HAL インスタンス(AM、FM、DAB など)ごとにラジオ モジュールを作成します

各ラジオ マネージャーは、ラジオのタイプに基づいて、対応するラジオ モジュールにチューナー セッションを作成するよう BRS にリクエストできます。各チューナー セッションは、選局、ステップ、キャンセルなどのメソッド(HAL インターフェース内で定義)を呼び出して、対応するブロードキャスト ラジオ HAL インスタンスに対するオペレーションを実行できます。1 つのチューナー セッションが HAL 更新情報(現在の番組情報、番組リスト、構成フラグ、ベンダー パラメータなど)に関する HAL インスタンスからコールバックを受信すると、更新情報に関するコールバックが同じラジオ モジュールにリンクされたすべてのラジオ チューナーに送信されます。

ブロードキャスト ラジオ HAL

ブロードキャスト ラジオの HIDL インターフェースと AIDL インターフェースの詳細、およびそれらの違いについて詳しくは、ブロードキャスト ラジオ HAL インターフェースをご覧ください。