Car Radio
记录下学习Android Car Radio源码,源码来源自https://cs.android.com/android
基于Android 10源码
类和方法
RadioManagerExt
RadioManagerExt 是对android.hardware.radio.RadioManager 的扩展
在源码中的位置packages/apps/Car/Radio/src/com/android/car/radio/platform/RadioManagerExt.java
有一个字段
private final @NonNull RadioManager mRadioManager;
mRadioManager 通过获取系统服务来获取
mRadioManager = (RadioManager)ctx.getSystemService(Context.RADIO_SERVICE);
RadioTunerExt
RadioTunerExt 是对android.hardware.radio.RadioTuner 的扩展
源码位置为packages/apps/Car/Radio/src/com/android/car/radio/platform/RadioTunerExt.java
其中也有一个RadioTuner 字段
private final RadioTuner mTuner;
ModuleProperties
ModuleProperties 类列出给定广播无线电模块支持的属性、选项和无线电频段。
- 每个模块都有一个唯一的 ID,用于在调用 RadioManager API 时对其进行寻址。
- 模块属性由 {
@link #listModules(List <ModuleProperties>) } 方法返回。

BandDescriptor
BandDescriptor 表示的是无线电波段描述符,它是ModuleProperties 波段数组中的一个元素,有两个子类
FmBandDescriptor AmBandDescriptor

ProgramSelector
ProgramSelector 表示的是调谐到给定电台所需的一组标识符。
A set of identifiers necessary to tune to a given station.
primary ID唯一标识一个station,可用于相等性检查。secondary IDs是补充的,可以加快调谐的过程
其内部有个Identifier 内部类,表示的是:
A single program identifier component, eg. frequency or channel ID.
调用顺序
在RadioAppService 服务类的onCreate() 方法中
mRadioManager = new RadioManagerExt(this);
......
mRadioTuner = mRadioManager.openSession(mHardwareCallback, null);
通过调用RadioManagerExt#openSession 方法,获取到RadioTunerExt 对象
 initModules() 方法如下:  reduceAmFmBands 方法如下: 
|