广播电台堆栈由图 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(例如调谐、步进和取消)。这些 API 可以从电台应用中调用,并向广播电台服务发送请求。在电台调谐器中定义的回调方法 (RadioTuner.Callback
) 会从 BRS 向应用发送有关广播电台 HAL 的更新(例如当前节目信息、节目列表和供应商定义的参数)。
广播电台服务
广播电台服务 (frameworks/base/services/core/java/com/android/server/broadcastradio
) 是广播电台 HAL 的客户端服务。BRS 使用广播电台 HAL 协调多个电台管理器。BRS 支持 HAL 接口定义语言 (HIDL) 和 Android 接口定义语言 (AIDL) 广播电台 HAL。如果存在任何 AIDL HAL 服务,BRS 就会关联到 AIDL HAL;否则,该服务会关联到 HIDL HAL。BRS 会为每个可用的 HAL 实例(例如 AM、FM 和 DAB)创建一个电台模块。
每个电台管理器都可以请求 BRS 根据电台类型在相应的电台模块上创建调谐器会话。每个调谐器会话都可以调用(在 HAL 接口中定义的)调谐、步进和取消等方法对相应的广播电台 HAL 实例执行操作。当一个调谐器会话收到 HAL 实例对 HAL 更新(例如当前节目信息、节目列表、配置标志和供应商参数)发出的回调时,系统会将有关更新的回调发送给与同一电台模块关联的所有电台调谐器。
广播电台 HAL
如需详细了解广播电台的 HIDL 和 AIDL 接口以及两者之间的区别,请参阅广播电台 HAL 接口。