您的当前位置:首页正文

Android源码分析--STK

2024-11-06 来源:个人技术集锦

文件:StkAppService.java

函数:onCreate()

STK的APP程序启动后执行的第一个函数,会调用方法:

com.android.internal.telephony.gsm.stk.StkService.getInstance();

来获取StkService实例,经过效验后启动线程。/**

* Used for instantiating/updating the Service from the GsmPhone constructor.

*

* @param ci CommandsInterface object

* @param sr SIMRecords object

* @param context phone app context

* @param fh SIM file handler

* @param sc GSM SIM card

* @return The only Service object in the system

*/

文件:StkService.java

函数:public static StkService getInstance(CommandsInterface ci, SIMRecords sr,

Context context, SIMFileHandler fh, SimCard sc)

新建一个StkService类,并调用它的构造函数。在构造函数中获取RilMessageDecoder来处理消息,同时注册对RIL事件的处理包括:

MSG_ID_SESSION_END,

MSG_ID_PROACTIVE_COMMAND,

MSG_ID_EVENT_NOTIFY,

MSG_ID_CALL_SETUP,

然后调用函数reportStkServiceIsRunning函数通知RIL层,StkService服务已经启动。这个通知会转换为一条REQUEST,RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING

注意:该函数应该是由Phone类的构造函数来调用。

文件:PhoneFactory.java

函数:public static void makeDefaultPhone(Context context)

在这个函数中会根据电话制式的类型调用GSM或者CDMA类的构造,网路类型取决于RILConstants. PREFERRED_NETWORK_MODE,它的值由下发给RIL的REQUEST:

RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE的上报决定。

在GSM的构造函数中会调用:

StkService.getInstance()

如果该实例没有被初始化,则初始化,否则直接返回。

文件:StkService.java

函数:handleMessage

收到RIL层的主动上报:UNSOL_STK_PROACTIVE_COMMAND后,调用函数;handleMessage->

sendStartDecodingMessageParams(),发送给函数processMessage()->decodeMessageParams-> mCmdParamsFactory.make(BerTlv.decode(rawData))-> msg.sendToTarget();->handleMessage-> handleRilMsg-> handleProactiveCommand-> mContext.sendBroadcast(intent);

同时向板侧发送sendTerminalResponse

也就是在这个函数广播了解析结果,并向板侧发送了回应。

/packages/app/phone/src/com/android/phone

Setting.java OnCreate中根据不同制式,有不同的UI显示。

显示全文