在《Android Radio实战——调频/调幅(十二)》中,我们解析 hal1 和 hal2 的代码时,hal1 是通过 scan() 来实现调频/调幅功能的。而 hal2 直接获取列表中的频道数据,来实现调频/调幅的切换。那么 hal2 中的这个列表是从哪里来的呢?这里我们就来分析一下。
一、频道列表
1、列表初始化
TunerSession.cpp
源码位置:/hardware/interfaces/broadcastradio/2.0/default/TunerSession.cpp
Return<Result> TunerSession::scan(bool directionUp, bool /* skipSubChannel */) {
......
// 获取频道列表
auto list = virtualRadio().getProgramList();
......
return Result::OK;
}
VirtualRadio.cpp
源码位置:/hardware/interfaces/broadcastradio/2.0/default/VirtualRadio.cpp
VirtualRadio::VirtualRadio(const std::string& name, const vector<VirtualProgram>& initialList)
: