在前面的文章中,无论是 hal1 还是 hal2 再切换频道的时候都会调用 tuneInternalLocked() 方法。且切换方式都是调用 virtualRadio().getProgram() 方法,只是后面的通知方法有所区别。
1、切换频道HAL
tuneInternalLocked
源码位置:
hal1.1:/hardware/interfaces/broadcastradio/1.1/default/Tuner.cpp
hal2.0:/hardware/interfaces/broadcastradio/2.0/default/TunerSession.cpp
void TunerSession::tuneInternalLocked(const ProgramSelector& sel) {
VirtualProgram virtualProgram;
ProgramInfo programInfo;
if (virtualRadio().getProgram(sel, virtualProgram)) {
mCurrentProgram = virtualProgram.selector;
programInfo = virtualProgram;
} else {
mCurrentProgram = sel;
// 电台切换失败
programInfo = makeDummyProgramInfo(sel);
}
mIsTuneCompleted = true;
......
}
// 电台切换失败,生成不指向任何程序的ProgramInfo
static ProgramInfo makeDummyProgramInfo(const Pr