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波段数组中的一个元素,有两个子类
FmBandDescriptorAmBandDescriptor

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方法如下: 
|