STK 或者 UTK 就是 Sim Tool Kit (sim卡工具包),定制了一系列与运营商相关的应用(查询天气,话费,彩铃等),可以理解为安装在SIM卡上的应用。目前对用户来说,基本上没有什么实际作用,google 自带了一个stk 应用。运营商将相关应用保存在SIM卡中,stk应用需要从SIM卡中读取相关应用信息,SIM卡也会向stk应用主动上报应用信息。
Stk应用和SIM卡之间的通信主要通过RIL层来实现,相关消息有
unsolicited response message:
RIL_UNSOL_STK_SESSION_END // 当前菜单项目 结束
RIL_UNSOL_STK_PROACTIVE_COMMAND // 显示菜单
RIL_UNSOL_STK_EVENT_NOTIFY
RIL_UNSOL_STK_CALL_SETUP
solicited response message
RIL_REQUEST_STK_GET_PROFILE
RIL_REQUEST_STK_SET_PROFILE
RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND // 打开子菜单
RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE //获取子菜单信息
RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM
1.AppInterface
AppInterface 是一个 接口,主要用于 Stk应用和 stk telephony 之间的通信。catService.java,UiccManager.java 以及RIL.java 是stk telephony 的核心组件。
<1>AppInterface 定义了stk应用里的所有命令。
public static enum CommandType {
DISPLAY_TEXT(0x21),
GET_INKEY(0x22),
GET_INPUT(0x23),
LAUNCH_BROWSER(0x15),
PLAY_TONE(0x20),
REFRESH(0x01),
SELECT_ITEM(0x24),
SEND_SS(0x11),
SEND_USSD(0x12),
SEND_SMS(0x13),
SEND_DTMF(0x14),
SET_UP_EVENT_LIST(0x05),
SET_UP_IDLE_MODE_TEXT(0x28),
SET_UP_MENU(0x25),
SET_UP_CALL(0x10),
OPEN_CHANNEL(0x40),
CLOSE_CHANNEL(0x41),
RECEIVE_DATA(0x42),
SEND_DATA(0x43),
GET_CHANNEL_STATUS(0x44),
PROVIDE_LOCAL_INFORMATION(0x26);
<2> AppInterface定义了处理命令的方法,onCmdResponse 主要用于 stk应用向CatService 传递命令消息。
<3> CatService 实现了AppInterface接口,在Stk应用的 StkAppService 中持有 AppInterface[] 对象,这个数组的大小和SIM卡的数量相等。
2.StkAppService
StkAppService 是一个Service,stk应用中,所有的画面都会显示菜单,用户执行命令时,就是通过启动该Service,让Service 将用户的命令传递给CatService.
StkAppService 持有 AppInterface[],AppInterface[] 从UiccManager 中获取,有几张SIM卡就有几个AppInterface,一张SIM卡对应一个 CatService,CatService 处于单独的HandlerThread中,(App->RIL)消息传递的路径就是这样的,StkMenuActivity->StkAppService->ServiceHandler->CatService,(RIL->App)消息传递路径就是这样的,CatService->StkAppService->ServiceHandler->StkMenuActivity.
3.UiccManager
UiccManager,本质上是一个Handler,它向RIL注册了一个卡状态变化的消息。
for (int i = 0; i < mCi.length; i++) {
Integer index = new Integer(i);
mCi[i].registerForIccStatusChanged(this, EVENT_ICC_STATUS_CHANGED, index);
mCi[i].registerForNotAvailable(this, EVENT_RADIO_UNAVAILABLE, index);
// TODO remove this once modem correctly notifies the unsols
mCi[i].registerForOn(this, EVENT_ICC_STATUS_CHANGED, index);
}
当SIM卡的状态发生变化时,会主动上报消息,RIL 收到 RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED,UiccManager处理该消息。
case EVENT_ICC_STATUS_CHANGED:
Log.d(LOG_TAG, "Received EVENT_ICC_STATUS_CHANGED, calling getIccCardStatus"
+ " on index " + index);
mCi[index].getIccCardStatus(obtainMessage(EVENT_GET_ICC_STATUS_DONE, index));
向RIL请求获取 SIM卡状态,获取状态后,交给 UiccManager的 EVENT_GET_ICC_STATUS_DONE处理。
case EVENT_GET_ICC_STATUS_DONE:
Log.d(LOG_TAG, "Received EVENT_GET_ICC_STATUS_DONE on index " + index);
AsyncResult ar = (AsyncResult)msg.obj;
onGetIccCardStatusDone(ar, index);
break;
UiccManager 会将相关消息交给CatService.
4.CatService 接收UiccManager 传递过来的消息,或者直接接收RIL 传递过来的信息,将信息传递到Stk 应用。Stk 应用也是通过 CatService 将相关动作发送给 stk telephony。
不同于通话和网络模块的主动上报信息是交给TelephonyRegistry,Stk的主动上报信息是交给CatService 上报的。
CatService 是在UiccManager 中初始化的,一张SIM卡对应一个CatService,Stk 应用也是通过 UiccManager 获取CatService 的。
CatService 处理完主动上报的信息后,通过发送广播,将消息发送到Stk 应用。
CatService 收到Stk应用发出的命令请求后,直接向RIl发送消息。
5.RilMessageDecoder
RilMessageDecoder 是一个状态机,stk telephony 从SIM卡读取的信息是需要解码的,RilMessageDecoder可以看作是一个解码工具,解码完成后,它会将解码结果交给CatService.
- 浏览: 30233 次
- 性别:
- 来自: 北京
相关推荐
Android上面的STK应用,专门添加了针对中国移动和中国联通的部分
3G模块H330在android下的 ril 中间件;包含STK指令。配合PPPD拨号完成 3G注册上网功能
java搭建的平台上实现了与stk的集成,案例简单,适合初学者
Android STK 服务解析
估计大家对它最直观的印象就是插入sim卡或usim卡开机时,会出现中国移动动感地带,神州行,中国联通这一类的提示信息,展示的方式可能字符串或一个对话框,这个就是STK的功劳了。简单说明一下,STK是sim/usim卡上的...
SIM STK开发简介
TK X 教程。在Java中使用STK X。更多STK学习资料请关注博客:http://blog.csdn.net/appe1943
当今流行的脚本语言,stk格式学习笔记!
1.1STK软件简介 卫星工具软件STK(Satellite Tool Kit,STK)是航天领域中先进的系统分析软件,由美国分析图形有限公司(Analytical Graphics Inc, AGI)...STK基本模块的核心能力是生成位置和姿态数据、可见性及覆盖分析
移动应用终端开发,SIM Application tookit(STK),让你明白STK的业务流程,SIM卡和终端设备的交互
STK是先进的商用现货(COTS)分析和可视化工具,它可以支援航天、防御和情报任务。利用它可以快速方便地分析复杂任务,获得易于理解的图表和文本形式的分析结果,以确定最佳解决方案。 上传内容为一些。
STK10使用入门、STK基础教程、STK用户手册、STK综合介绍等教程
Java3D编程有时需要STK的资源提供一些方便,本资源是将STK源码编译成Java包需要到的核心包和附加包。
Android应用源码开发Demo,主要用于毕业设计学习。
铱星STK,观看铱星运行的三维或者二维STK场景文件
在QT项目中添加STK.h和STK.cpp(当然,你也可以改成其他名字,我这里就简单设置为STK.h和STK.cpp了),其中STK.h中包含CppIncludes目录中的AgStkUtil.tlh、AgVGT.tlh、AgStkObjects.tlh、STKX.tlh,注意需要引用相应...
包含 C++、C#、Java、Matlab、Html等语言的二次开发教程,入门版
STK的核心能力是产生位置和姿态数据、获取时间、遥感器覆盖分析。STK专业版扩展了STK的基本分析能力,包括附加的轨道预报算法、姿态定义、坐标类型和坐标系统、遥感器类型、高级的约束条件定义,以及卫星、城市、...
Supertuxkart是一个开源的赛车游戏,使用irrlicht bullet 。...测试手机nexus5eclipse android4.2 ndkr9源码提交到了git https://github.com/344717871/STK_android游戏中截图 标签:STKAndroid
STK 二次开发-Data Provider文档 主要介绍了STK一些报告功能的格式个性化导出功能,以及常用模块的调用。需具备一定的STK使用基础的人使用。