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.
- 浏览: 32621 次
- 性别:
- 来自: 北京
相关推荐
RIL for Android的实现包括用户空间的RIL daemon和内核空间的驱动程序两部分。用户空间的RIL daemon负责接收来自Android系统的请求,并将其转化为AT命令发送给硬件,同时处理硬件返回的响应。内核空间的驱动则负责...
RIL的Java框架部分由RIL模块和Phone模块构成。RIL模块处理与rild的通信,而Phone模块则向应用开发者暴露电话功能接口,例如拨打电话、发送短信等。Phone模块的核心是GSMPhone类,它通过PhoneFactory获取,并由...
"标签"中的"stk_andriod"表明这是与Android平台有关的STK开发,"stk_cmcc"和"stk_java"则分别代表中国移动和Java技术的关联。因为早期的STK应用主要是基于Java ME(Java Micro Edition)开发的,所以在Android系统中...
Android RIL(Radio Interface Layer)是Android系统中处理与无线通信硬件交互的关键组件,它的设计目标是为上层应用程序提供一个统一的接口,以实现对移动设备的语音、数据、短信、SIM卡管理和STK应用等功能的控制...
Java与STK(System Tool Kit)的集成应用是将Java编程语言与STK这款系统工具包相结合,以实现更高效、灵活的系统管理和数据分析。在Java搭建的平台上,这种集成可以充分利用Java的跨平台特性以及STK的强大功能,为...
RIL在Android系统架构中扮演着中介的角色,它位于硬件抽象层(HAL)之上,与基带调制解调器(baseband modem)进行通信,处理手机的语音、数据、短信、SIM卡管理和STK(SIM应用工具包)功能。RIL的设计思想类似于...
例如,`frameworks/base/core/java/android/telephony/stk`目录下可能会有`STKService.java`,它是Android系统中处理STK命令和服务的核心类。 2. **packages**: 这个目录下可能包含用户界面相关的代码,如`packages...
命令可以从STK RIL通过特定的消息类型传递,如`RIL_UNSOL_STK_PROACTIVE_COMMAND`,`RIL_UNSOL_STK_EVENT_NOTIFY`,`RIL_UNSOL_REFRESH`和`RIL_UNSOL_STK_SESSION_END`。另一方面,STK App或STK Telephony层发出的...
在 Android 中,RIL 的应用非常广泛,例如 ITelephony 和 SmsManager 就是基于 RIL 的,这些类提供了电话拨号、短信发送等功能,使得 Android 设备可以与外部世界沟通。 Android RIL 是 Android 操作系统中的一种...
`StkAppService`是STK框架的核心组件之一,它是一个后台服务,负责处理所有与STK相关的事件和数据。该服务通过`ServiceHandler`辅助处理各种事件。 - **处理事件类型**: - **OP_CMD**:由底层上报的命令,如设置...
STK-X是STK(Systems Tool Kit)的一个扩展,它允许开发者在Java环境中嵌入STK的核心功能。STK是一个广泛使用的商业软件包,用于动态分析、测试和可视化复杂的航天任务。通过Java与STK-X的结合,开发者可以创建包含...
RIL.java是Framework侧与RIL层交互的主要接口,它定义了Framework层与RIL层之间的消息格式和处理逻辑。Framework层通过Socket向RIL层发送请求,并接收RIL层返回的响应消息。此外,也可以通过oem_socket接口直接与RIL...
5. **STKCommands**:这部分可能包含自定义的类,用于封装STK命令和响应,便于管理和处理。 6. **XML布局文件**:包含了应用的用户界面设计,通过XML文件描述控件的布局和属性。 7. **权限声明**:在...
Framework---Telephony基本流程 Telephony是移动电话网络中的一种技术,主要负责处理...整个Telephony流程可以分为来电流程、短信流程、STK流程、SIM卡流程、网络注册流程等多个部分,每个部分都涉及到多个类和方法。
Android STK 服务解析
Java作为跨平台的编程语言,其在STK中的应用主要体现在构建分布式系统和Web服务上。`STK-XTutorials-Java.pdf`将指导你如何利用Java的STK API,创建可以在不同操作系统上运行的STK应用程序。 这些教程不仅适用于想...
在Android系统中,Stk服务是与SIM卡进行通信的重要组成部分,它负责处理SIM卡上的应用程序并显示相应的用户界面。 首先,我们来看一下Android源码中与Stk相关的组件。在`frameworks/base/services/core/java/...
综合来看,"stk40corestk40java"这套资源为Java3D开发者提供了一个集成的环境,包含了STK的核心功能和扩展,以及VTK的Java支持,使得开发者能够在Java平台上进行高效、丰富的3D图形编程。这不仅简化了开发流程,还...
SIM STK开发简介
Android stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stk