文件: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显示。