`

Stk简介和核心类(android4.0 RIL Framework Java 部分)

    博客分类:
  • Stk
阅读更多

 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.

分享到:
评论

相关推荐

    reference-ril.rar_RIL for android_RIL linux_android_android ril_

    RIL for Android的实现包括用户空间的RIL daemon和内核空间的驱动程序两部分。用户空间的RIL daemon负责接收来自Android系统的请求,并将其转化为AT命令发送给硬件,同时处理硬件返回的响应。内核空间的驱动则负责...

    Android RIL介绍

    RIL的Java框架部分由RIL模块和Phone模块构成。RIL模块处理与rild的通信,而Phone模块则向应用开发者暴露电话功能接口,例如拨打电话、发送短信等。Phone模块的核心是GSMPhone类,它通过PhoneFactory获取,并由...

    Stk.zip_android_android stk_stk android_stk cmcc_stk和java

    "标签"中的"stk_andriod"表明这是与Android平台有关的STK开发,"stk_cmcc"和"stk_java"则分别代表中国移动和Java技术的关联。因为早期的STK应用主要是基于Java ME(Java Micro Edition)开发的,所以在Android系统中...

    android_Ril剖析

    Android RIL(Radio Interface Layer)是Android系统中处理与无线通信硬件交互的关键组件,它的设计目标是为上层应用程序提供一个统一的接口,以实现对移动设备的语音、数据、短信、SIM卡管理和STK应用等功能的控制...

    java与stk集成应用

    Java与STK(System Tool Kit)的集成应用是将Java编程语言与STK这款系统工具包相结合,以实现更高效、灵活的系统管理和数据分析。在Java搭建的平台上,这种集成可以充分利用Java的跨平台特性以及STK的强大功能,为...

    Android RIL 原生代码(cc++)

    RIL在Android系统架构中扮演着中介的角色,它位于硬件抽象层(HAL)之上,与基带调制解调器(baseband modem)进行通信,处理手机的语音、数据、短信、SIM卡管理和STK(SIM应用工具包)功能。RIL的设计思想类似于...

    安卓Android源码——Stk.rar

    例如,`frameworks/base/core/java/android/telephony/stk`目录下可能会有`STKService.java`,它是Android系统中处理STK命令和服务的核心类。 2. **packages**: 这个目录下可能包含用户界面相关的代码,如`packages...

    终端移动设备开发STK简介

    命令可以从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 introduction

    在 Android 中,RIL 的应用非常广泛,例如 ITelephony 和 SmsManager 就是基于 RIL 的,这些类提供了电话拨号、短信发送等功能,使得 Android 设备可以与外部世界沟通。 Android RIL 是 Android 操作系统中的一种...

    android stk

    `StkAppService`是STK框架的核心组件之一,它是一个后台服务,负责处理所有与STK相关的事件和数据。该服务通过`ServiceHandler`辅助处理各种事件。 - **处理事件类型**: - **OP_CMD**:由底层上报的命令,如设置...

    STK-X Tutorials-Java

    STK-X是STK(Systems Tool Kit)的一个扩展,它允许开发者在Java环境中嵌入STK的核心功能。STK是一个广泛使用的商业软件包,用于动态分析、测试和可视化复杂的航天任务。通过Java与STK-X的结合,开发者可以创建包含...

    QCRIL_RIL_架构分析

    RIL.java是Framework侧与RIL层交互的主要接口,它定义了Framework层与RIL层之间的消息格式和处理逻辑。Framework层通过Socket向RIL层发送请求,并接收RIL层返回的响应消息。此外,也可以通过oem_socket接口直接与RIL...

    Android应用源码之Stk-IT计算机-毕业设计.zip

    5. **STKCommands**:这部分可能包含自定义的类,用于封装STK命令和响应,便于管理和处理。 6. **XML布局文件**:包含了应用的用户界面设计,通过XML文件描述控件的布局和属性。 7. **权限声明**:在...

    framework---telephony基本流程

    Framework---Telephony基本流程 Telephony是移动电话网络中的一种技术,主要负责处理...整个Telephony流程可以分为来电流程、短信流程、STK流程、SIM卡流程、网络注册流程等多个部分,每个部分都涉及到多个类和方法。

    Android STK 服务解析

    Android STK 服务解析

    STK二次开发教程.rar

    Java作为跨平台的编程语言,其在STK中的应用主要体现在构建分布式系统和Web服务上。`STK-XTutorials-Java.pdf`将指导你如何利用Java的STK API,创建可以在不同操作系统上运行的STK应用程序。 这些教程不仅适用于想...

    Android应用源码之Stk.zip

    在Android系统中,Stk服务是与SIM卡进行通信的重要组成部分,它负责处理SIM卡上的应用程序并显示相应的用户界面。 首先,我们来看一下Android源码中与Stk相关的组件。在`frameworks/base/services/core/java/...

    stk40corestk40java

    综合来看,"stk40corestk40java"这套资源为Java3D开发者提供了一个集成的环境,包含了STK的核心功能和扩展,以及VTK的Java支持,使得开发者能够在Java平台上进行高效、丰富的3D图形编程。这不仅简化了开发流程,还...

    STK开发简介

    SIM STK开发简介

    Android stk

    Android stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stkAndroid stk

Global site tag (gtag.js) - Google Analytics