Android FM模块学习之四源码解析(三)

由于最近一直忙项目,没有时间来更新文档,今天抽空来写一点,希望大家可以学习使用!

这一章当然还是来分析FM模块的源码。FmReceiver.java

publicFmReceiver(String devicePath,FmRxEvCallbacksAdaptor callback) throwsInstantiationException {

      mControl = new FmRxControls();

      mRxEvents = new FmRxEventListner();

      //registerClient(callback);

      mCallback = callback;

   }

/**注册一个回调为调频接收机事件通知。

* < p >

*这是一个同步命令用于注册的事件通知调频接收机的司机。自调频驱动异步执行一些任务,该功能允许客户端异步接收信息。

* < p >

*在调用该函数时,客户机必须通过一个回调函数用来实现异步事件。必须非空值参数的回调。如果一个NULL值传递给这个函数,注册将会失败。

* < p >

*客户端可以选择哪些事件将从接收器发送司机只需实现事件希望接收的功能。

* < p >

* @param回调事件回调处理事件的调频接收机。

* @return真如果回调注册,假如果回调注册失败了。

*初始化失败。

* < p >

* @see #收购

*@see # unregisterClient

**/

public boolean registerClient(FmRxEvCallbacks callback){
      boolean status;
      status = super.registerClient(callback);
      /* Do Receiver Specific Stuff here.*/

      return status;
   }

/**

*   使调频装置在接收模式。

*    <p>

*    这是一个同步的方法用于初始化调频接收机。如果已经初始化该函数将intialize接收者使用默认设置。只有在成功地调用这个函数的许多调频设备接口可以使用。

*    <p>

*    使接收者时,客户机还必须提供的区域设置接收器将运作。这些设置(包括参数configSettings)通常用于设置调频接收机操作在一个特定的地理区域。这些设置可以更改后启用调频驱动程序通过使用函数{ @link #配置}。

*    <p>

*   
这个命令只能出具一个调频接收器的所有者。发出这个命令,客户机必须首先成功叫{ @link #获得}。

*    <p>

*    @param configSettings设置打开收音机时应用

*    @return真如果初始化成功了,假如果初始化失败。

*    <p>

*@see #启用

*@see # registerClient

*@see #禁用

*

*/

public boolean enable (FmConfig configSettings)

/ * *

*重置调频装置。

* < p >

*这是一个同步命令用于重置调频装置的状态不可恢复的错误。这个函数时将使用客户端收到意想不到的广播通知禁用。曾称,大多数调频装置提供的功能将被禁用,直到客户端还可以重新开启设备再次通过{
@link #可用}。

* < p >

*@return真如果复位成功了,假如果重置失败了。

@see #启用

@see #禁用

@see # registerClient

* /

publicboolean reset()

/ * *

*禁用调频装置。

* < p >

*这是一个同步命令用于禁用调频装置。时这个函数将使用客户端不再需要使用调频装置。曾称,大多数调频装置提供的功能将被禁用,直到客户端还可以重新开启设备再次通过{ @link #可用}。

* < p >

* @return真如果禁用成功了,假如果禁用失败了。

@see #启用

@see # registerClient

* /

publicboolean disable()

/ * *

*获取当前搜索操作的状态。

* < p >

时这个函数将使用searchStations()函数想知道是否寻求/扫描/自动选择操作已经正在进行。

如果一个寻求命令时发出一个已经正在进行,我们取消正在寻求命令和开始新的搜索操作。

* < p >

* @return调频搜索操作的当前状态:

* SRCH_COMPLETE

* SRCH_INPROGRESS

* SRCH_ABORTED

* /

static int getSearchState()

/ * *

*设置搜索操作的当前状态。

* < p >

*这个函数是用于设置当前状态的搜索操作。如果一个寻求命令时发出一个已经正在进行,我们取消正在寻求命令,搜索操作的状态设置为SRCH_ABORTED和开始新的搜索。

* < p >

* @return没有

* /

static void setSearchState(int state)

/ * *

*启动基本的寻求和扫描操作。

*

* < p >

*使用此命令来调用一个基本寻求/ FM无线电频段的扫描

* < p >

* < ul >

*这个API用于:<李>调用基本寻求操作({ @link # FM_RX_SRCH_MODE_SEEK })<李>调用基本的扫描操作({ @link # FM_RX_SRCH_MODE_SCAN })

* < / ul >

* < p >

*这个函数执行的最基本的操作是一个{ @link # FM_RX_SRCH_MODE_SEEK }的命令。递增或递减的寻求过程处理频率在预定义的通道的步骤(由信道间隔定义)和测量得到的信号电平。一旦成功调站,发现为了达到或超过这个信号电平,寻求操作将完成和FmRxEvSearchComplete事件将返回给客户端。如果没有发现匹配搜索标准站,频率将会回到最初调谐。

* < p >

*由于寻求总是导致频率调谐,每个寻求操作也将返回一个FmRxEvRadioTuneStatus事件到客户机/应用程序层。

*

* < p >

就像{ @link # FM_RX_SRCH_MODE_SEEK },{ @link # FM_RX_SRCH_MODE_SCAN }命令可以比作许多背靠背寻求一段住在每个成功的追求。一旦发布,扫描将增量或减量的频率定义信道间隔直到找到站达到或超过搜索阈值集。一旦发现本站,并成功地调整,FmRxEvRadioTuneStatus事件将返回给客户端,车站仍将调整为特定的时间内由参数dwellPeriod表示。时间到期后,FmRxEvSearchInProgress事件将被发送到客户端和一个新的将开始寻找下一站符合搜索阈值。后扫描整个乐队,或取消后搜索已经由客户端发起,FmRxEvRadioTuneStatus事件将被发送到客户端。类似于寻求命令,每个扫描将导致至少一个站被调整,即使这是起始频率。

* < p >

*每次司机启动搜索(寻求或扫描)客户端将通过一个FmRxEvSearchInProgress事件通知。同样,每次搜索完成后,客户端将通过一个FmRxEvRadioTuneStatus事件通知。

* < p >

*搜索可以在任何时候被取消使用API cancelSearch()。一旦取消,每个搜索将调到最后一站和生成FmRxEvSearchComplete和FmRxEvRadioTuneStatus事件。有效参数值“模式”:

* < ul >

* <li>{@link #FM_RX_SRCH_MODE_SEEK}

*  <li>{@link #FM_RX_SRCH_MODE_SCAN}

* < / ul >

* < p >

*有效参数值“dwellPeriod”:

* < ul >

*    <li>{@link #FM_RX_DWELL_PERIOD_1S}

*    <li>{@link #FM_RX_DWELL_PERIOD_2S}

*    <li>{@link #FM_RX_DWELL_PERIOD_3S}

*    <li>{@link #FM_RX_DWELL_PERIOD_4S}

*    <li>{@link #FM_RX_DWELL_PERIOD_5S}

*    <li>{@link #FM_RX_DWELL_PERIOD_6S}

*    <li>{@link #FM_RX_DWELL_PERIOD_7S}

* < / ul >

* < p >

*有效参数值“方向”:

* < ul >

*    <li>{@link #FM_RX_SEARCHDIR_DOWN}

*    <li>{@link #FM_RX_SEARCHDIR_UP}

* < / ul >

* < p >

* @param模式调频的搜索模式。

@param dwellPeriod调频扫描住时间。只有当使用

模式= { @link # FM_RX_SRCH_MODE_SCAN }

@param方向搜索方向。

* < p >

* @return真如果搜索启动成功了,假如果搜索启动失败。

@see # searchStations(int,int,int,int,int)

@see # searchStationList

* /

public boolean searchStations (int mode,int dwellPeriod,int direction)

public boolean searchStations (int mode,int dwellPeriod,int direction,int pty,int pi)

/ * *启动站列表搜索操作。

* < p >该方法将初启搜索,生成基于强和弱电台的频率列表中发现的调频乐队。

* < p >

* < ul >

*这个API是用于生成站列表包括:

* <li>强站(FM_RX_SRCHLIST_MODE_STRONGFM_RX_SRCHLIST_MODE_STRONGEST)

* <li>弱站(FM_RX_SRCHLIST_MODE_WEAKFM_RX_SRCHLIST_MODE_WEAKEST)

* < / ul >

* < p >

*扫描的频率范围取决于当前组乐队。司机搜索所有有效站在乐队和完成后,返回一个频道列表基于客户的选择。客户端可以选择搜索中最强的电台列表乐队,乐队最弱的电台,或第N强弱。通过设置maximumStations参数,客户端可以限制返回的频率数在列表中。如果用户指定参数maximumStations
0,搜索将生成站的最大数量。

* < p >

*驱动每次启动一个基于列表的搜索,客户端将通过一个FmRxEvSearchInProgress事件通知。类似地,每一次基于列表搜索完成后,客户端将通过一个FmRxEvSearchListComplete事件通知。

* < p >

*完成搜索,最初调谐站将调谐和事件将生成如下:FmRxEvSearchListComplete——搜索完成。FmRxEvRadioTuneStatus——re-tuned最初的频率。

* < p >

*一旦发出搜索命令,多个命令从客户机可能不允许,直到搜索完成或取消。

* < p >

搜索可以在任何时候被取消使用API cancelSearch()。取消搜索视为完成搜索和事件将生成如下:FmRxEvSearchComplete——搜索完成。FmRxEvRadioTuneStatus——re-tuned最初的频率。

* < p >

* 有效参数值“模式”:

* < ul >

* <li> { @link #FM_RX_SRCHLIST_MODE_STRONG }

* <li> { @link #FM_RX_SRCHLIST_MODE_WEAK }

* <li> { @link #FM_RX_SRCHLIST_MODE_STRONGEST }

* <li> { @link #FM_RX_SRCHLIST_MODE_WEAKEST }

* <li> FM_RX_SRCHLIST_MODE_PTY(将来会实现吗)

* < / ul >

* < p >

*有效参数值“方向”:

* < ul >

*    <li>{@link #FM_RX_SEARCHDIR_DOWN}

*    <li>{@link #FM_RX_SEARCHDIR_UP}

* < / ul >

* < p >

* 有效参数值“maximumStations”:1 - 12

< p >

*@param模式调频的搜索模式。

@param方向搜索方向。

@param maximumStations站的最大数量,可以从搜索返回。这个参数被忽略和12站返回FM_RX_SRCHLIST_MODE_STRONGEST或FM_RX_SRCHLIST_MODE_WEAKEST如果搜索模式

@param企业调频RDS搜索程序类型(目前不使用)

* < p >

* @return真如果搜索启动成功了,假如果搜索启动失败。

@see # searchStations(int,int,int)

@see # searchStations(int,int,int,int,int)

* /

public boolean searchStationList (int mode,int direction,int maximumStations,int pty)

/ * *

*取消正在进行的搜索操作 (扫描,寻找searchlist等等)。

* < p >

*这种方法应该用于取消之前启动搜索(例如基本寻求/扫描,RDS寻求/扫描、搜索列表,等)。

* < p >

一旦完成,这个命令将生成一个FmRxEvSearchCancelledtr事件所有注册的客户。这个事件后,客户端还可以接收搜索事件正在进行相关搜索正在完成。

*

* < p >

* @return真如果取消搜索启动成功,假如果取消搜索启动失败。

@see # searchStations(int,int,int)

@see # searchStations(int,int,int)

@see # searchStationList

* /

关闭搜索更改状态

publicboolean cancelSearch ()

/ * *

*允许调频接收机静音和非静音。

* < p >

*这是一个同步命令用于静音或un-mute FM音频。这个命令减弱来自FM音频设备。重要的是要注意,这只会影响调频音频而不是其他音频系统被使用。

* < p >

* @param沉默的模式设置应用模式

* < p >

@return真如果setMuteMode调用放置成功,假如果setMuteMode失败了。

@see #启用

@see # registerClient

* /

public boolean setMuteMode (int mode)

/ * *

*FM的单声道/立体声模式设置。

*

* < p >

*此命令允许用户设置的单声道/立体声模式调频装置。使用此功能,用户可以允许单声道/立体声混音或单声道音频的接待。

@param stereoEnable如此:支持立体声,Mono错误的:力量

@return真如果setStereoMode调用放置成功,假如果setStereoMode失败了。

* /

public boolean setStereoMode (booleanstereoEnable)

返回当前的RDS / RBDS计划服务

publicFmRxRdsData  getPSInfo()

/ * *

*此函数返回一个频率的列表。

*

* < p >

*该方法获得的结果{ @link # searchStationList }。这种方法应该调用FmRxEvSearchListComplete时调用。

* < p >

*@return整数数组,对应的频率搜索电台

@see # searchStationList

* /

public int[] getStationList ()

/ * *

*此函数返回当前设备的信号强度

*

* < p >

*该方法返回当前的信号强度调谐。

* < p >

* 目前@return RSSI的调谐

* /

public intgetRssi()
时间: 2024-11-11 01:04:01

Android FM模块学习之四源码解析(三)的相关文章

Android FM模块学习之四源码解析(二)

上一章我们了解了FM主activity:FMRadio.java,若没查看的,请打开链接Android FM模块学习之四源码解析(一) 查看fmradio.java源码注释.接下来我们来看看FM重要的一个类:FMRadioService.java 由上一章我们已经知道,打开FM时,在OnStart函数中会bindToService来开启服务, public boolean bindToService(Context context, ServiceConnection callback) { L

Android FM模块学习之四源码解析(一)

前一章我们了解了FM手动调频,接下来我们要分析FM模块用到的源码.此源码是基于高通平台的,别的平台都大同小异,只不过是平台自己作了些小改动而已. 首先要看的当然是主activity, FMRadio.java fmradio类启动FMRadioService.java类调用FmSharedPreferences类进行存储数据,PresetStation调整频率 setVolumeControlStream(AudioManager.STREAM_MUSIC);音乐回放即媒体音量 LoadedDa

Android FM模块学习之四源码解析(四)

我今天想分享的是FM模块的保存方法,即FmSharedPreferences.java FmSharedPreferences(Context context)在构造方法中加载Load()方法, public void  Load(){       Log.d(LOGTAG, "Load preferences ");       if(mContext == null)       {          return;       } SharedPreferences sp = m

Android FM模块学习之四源码分析(3)

接着看FM模块的其他几个次要的类的源码.这样来看FM上层的东西不是太多. 请看android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\Settings.java protected void onCreate(BundlesavedInstanceState) 从FMRadio.java用使用Intent跳转携带参数过来,在onCreate获取携带数据. protected void onCreate(Bundle savedIn

Android FM模块学习之四源码学习(2)

前几章我们分析了FM模块的几个主要的类文件,今天要分析的是:FMTransceiver.java   // 某些工程中名称为FMRadioService.java public class FmTransceiver { /* Primary FM States : * FM will be in one of the 4 states at any point of time * '0' - FMState_Turned_Off * '1' - FMState_Rx_Turned_On * '

Android FM模块学习之四源码分析(五)

前几章我们分析了FM模块的几个主要的类文件,今天要分析的是:FMTransceiver.java public class FmTransceiver { /* Primary FM States : * FM will be in one of the 4 states at any point of time * '0' - FMState_Turned_Off * '1' - FMState_Rx_Turned_On * '2' - FMState_Tx_Turned_On * '3' -

Android FM模块学习之四源码分析(七)

接上一篇,现在分析android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\StationListActivity.java protectedvoid onCreate(Bundle savedInstanceState)方法里 绑定FMRadioService服务 bindService((newIntent()).setClass(this, FMRadioService.class), osc, 0); 实例化ListVie

Android FM模块学习之源码分析(六)

现在是2015年1月啦,得改口说去年了,去年抽时间整理了一些FM模块的主要源码类的东西,今年再整理一下几个次要的类的源码.这样来看FM上层的东西不是太多. 请看android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\Settings.java protected void onCreate(BundlesavedInstanceState) 从FMRadio.java用使用Intent跳转携带参数过来,在onCreate获取携带数

AndroidFm模块学习之四源码解析(十一)

接上一篇,接下来看看android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\FmTags.java 当点击FMRadio.java菜单的全部频道选项,跳转到FmTags.java类 定义了一个ListView控件和一个简单适配器 private ListView la; private ArrayAdapter<String> adapter; 使用Handler刷新UI界面 private final Handler mHan