广播收音机堆栈由图 1 中所示的组件组成。
无线电参考应用
如需详细了解如何实现无线电控制,请参阅无线电控制实现。
一个示例 Java 无线电应用 (packages/apps/Car/Radio
) 用作参考实现。当应用服务启动时,它会请求 Radio Manager 打开一个 Radio Tuner。然后,应用可以向 Radio Tuner 发送请求,例如调谐到特定的无线电台、频率或搜索下一个可用的无线电台。应用从 Radio Manager 和 Radio Tuner 接收无线电更新,例如当前节目信息、无线电节目列表、配置和供应商定义的参数。参考无线电应用仅支持 AM 和 FM 无线电。OEM 可以根据需要修改或替换无线电应用。
Radio Manager
当应用请求 Radio Manager 打开调谐器时,Radio Manager (frameworks/base/core/java/android/hardware/radio/RadioManager.java
) 请求广播无线电服务 (BRS) 打开一个 Tuner 会话,然后将该会话包装在 Radio Tuner (frameworks/base/core/java/android/hardware/radio/RadioTuner.java
) 中,该 Radio Tuner 会返回到应用。Radio Tuner 定义了 API(例如 tune、step 和 cancel),这些 API 可以从无线电应用调用并向 BRS 发送请求。在 Radio Tuner 中定义的回调方法 (RadioTuner.Callback
) 发送来自 BRS 的关于广播无线电 HAL 的更新(例如当前节目信息、节目列表和供应商定义的参数)到应用。
广播无线电服务
广播无线电服务 (frameworks/base/services/core/java/com/android/server/broadcastradio
) 是广播无线电 HAL 的客户端服务。BRS 协调多个 Radio Manager 与广播无线电 HAL。BRS 支持 HAL 接口定义语言 (HIDL) 和 Android 接口定义语言 (AIDL) 广播无线电 HAL。当存在任何 AIDL HAL 服务时,BRS 会链接到 AIDL HAL;否则,该服务会链接到 HIDL HAL。BRS 为每个可用的 HAL 实例(例如 AM、FM 和 DAB)创建一个 Radio Module。
每个 Radio Manager 都可以请求 BRS 在相应的 Radio Module 上创建一个调谐器会话,具体取决于无线电的类型。每个调谐器会话都可以调用方法(例如 tune、step 和 cancel,在 HAL 接口中定义)以对相应的广播无线电 HAL 实例执行操作。当一个调谐器会话从 HAL 实例接收到关于 HAL 更新的回调(例如当前节目信息、节目列表、配置标志和供应商参数)时,关于该更新的回调会发送到链接到同一 Radio Module 的所有 Radio Tuner。
广播无线电 HAL
要详细了解广播无线电的 HIDL 和 AIDL 接口以及两者之间的差异,请参阅广播无线电 HAL 接口。