MTK平台 获取本机的SIM卡中IMSI号

公司MTK平台做开发,老板要求在MTK的代码上获得本机上SIM卡的手机号码,查了很多资料后,结果是无法获得,原因是手机号码不是直接存储在SIM卡的,而是信号通过移动商(移动、联通或电信)时绑定的;IMSI是sim卡的一个属性号,在移动系统中是跟sim卡号绑定的,开户之后跟手机号绑定,开户的过程就是将你的IMSI和手机号发给交换机HLR,这样子来电话的时候交换机就可以找到你了。

退而求其次,利用SIM的“ID号”也可以唯一标识一个用户,只是SIM可以补办,考虑统一电话号码不对应补办后的SIM卡信息,所以不是太好,但是无法得到手机号码,也只能先这么做了。

在实现方面,SIM卡中信息IMSI号的获得,是轻而易举的,远比获得手机号码简单地多,下面就是我的详细实现方法(有两种方法):

第一种方法:

void btl_send_msg_get_imsi(void)                //从MMI层想L4C层发送消息
     {
          MYQUEUE Message;       
          SetProtocolEventHandler(btl_sim_imsi_rsp, PRT_GET_IMSI_RSP);           //给PRT_GET_IMSI_RSP消息绑定一个函数
          Message.oslSrcId = MOD_MMI;   //发送消息源模块
          Message.oslDestId = MOD_L4C;    //消息的目的模块
          Message.oslMsgId = PRT_GET_IMSI_REQ;     //消息的ID
          Message.oslDataPtr = NULL;       //消息的携带数据
          Message.oslPeerBuffPtr = NULL;      
          OslMsgSendExtQueue(&Message);     //发送消息到外部队列
          kal_prompt_trace(MOD_MMI,"btl_send_msg_get_imsi");
      }

void btl_sim_imsi_rsp(void *info)       //PRT_GET_IMSI_RSP消息发生时会自动调用的函数
     {
           char imsi_imei_num[17];      //定义存放IMSI号的字符数组:IMSI号不多于15位,但是模拟器上会得到16位数字加一位结束符
           mmi_smu_get_imsi_rsp_struct *local_data = (mmi_smu_get_imsi_rsp_struct*) info;   //得到的信息内容
           kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp1");     //在Catcher中显示的
           strcpy(imsi_imei_num,(char*)local_data->imsi);     //将SIM存放在数组中 
           _cprintf("-----------------------------------/n");         
    _cprintf("the imsi number is : %s/n",imsi_imei_num);  //在控制台打印出获得的IMSI号
           kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp2");
      }

函数声明后,在任意文件的任意位置调用函数btl_send_get_imsi()即可,当系统有消息PRT_GET_IMSI_RSP发生时,就会调用函数btl_sim_imsi_rsp(),该函数的参数是消息PRT_GET_IMSI_RSP发生时所传过来的数据,是系统自动传参给该函数的。这样就可以获得到本机SIM卡的IMSI号了。

第二种方法是:定义事件捕获函数,捕获系统都有什么时间发生,当某一事件(例如来电事件、拒接事件、短信事件等等)发生时就会捕获到,我们可以自己做些自己的处理。

1)定义事件捕获函数:   FlySky_EventHook(unsigned short ID,void *pMsg)

void FlySky_EventHook(unsigned short ID,void *pMsg)

{

char imsiNum[17];

char phoneNUm[20];

memset(&imsiNum,0,sizeof(imsiNum));                   //初始化数组为'/0',以保证后面赋值的正确性

memset(&phoneNum,0,0, sizeof(phoneNUm));       //同上

switch(ID)

{

case PRT_INCOMINGCALL_EVENT:             //来电事件发生

{

IncomingCall  flysky_msg;

/* Get  the incoming call number */

memset(&flysky_msg, 0,sizeof(flysky_msg));   //初始化结构体flysky_msg,以免获得信息后赋值不正确

DeriveCallInfo(pMsg, &flysky_msg);         // 转换L4来电事件为IncomingCall结构事件

strcpy(phoneNum,(const char *)flysky_msg.Number);   //得到来电的电话号码

/* Test to get the IMSI*/

btl_send_msg_get_imsi();            //利用来电事件来测试,来电时发送消息给L4C层

}

case PRT_INCOMINGCALL_REJECTED:       //拒接来电

{

break;

}

case PRT_GET_IMSI_RSP:        //得到IMSI请求回复

{

btl_sim_imsi_rsp(pMsg);    //将该消息发生时的数据信息传参给btl_sim_imsi_rsp

break;

}

default:

break;

}

}

void btl_send_msg_get_imsi(void)
      {
            MYQUEUE Message;
            //SetProtocolEventHandler(btl_sim_imsi_rsp, PRT_GET_IMSI_RSP);
            Message.oslSrcId = MOD_MMI;
            Message.oslDestId = MOD_L4C;
            Message.oslMsgId = PRT_GET_IMSI_REQ;
            Message.oslDataPtr = NULL;
            Message.oslPeerBuffPtr = NULL;
            OslMsgSendExtQueue(&Message);
            kal_prompt_trace(MOD_MMI,"btl_send_msg_get_imsi");
       }

void btl_sim_imsi_rsp(void *info)
       {
            char imsi_imei_num[17];
            mmi_smu_get_imsi_rsp_struct *local_data = (mmi_smu_get_imsi_rsp_struct*) info;
            kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp1");
            strcpy(imsi_imei_num,(char*)local_data->imsi);
            //_cprintf("-----------------------------------/n");
            //_cprintf("the imsi number is : %s/n",imsi_imei_num);
            kal_prompt_trace(MOD_MMI,"btl_sim_imsi_rsp2");
       }

首先要将函数FlySky_EventHook()在MMITask.c文件MMI_task函数前进行声明:extern void FlySky_EventHook(unsigned short ID, void* pMsg);  然后在函数MMI_task的“default: ProtocolEventHandler()”和“break”之间加上:FlySky_EventHook(Message.oslMsgId, (void*)Message.oslDataPtr);

这样就可以捕获到系统所有事件了,想要对什么时间进行捕获,直接在FlySky_EventHook中的case出给出事件对应的消息即可,并对该消息下的事件进行相应的处理即可。

说明:在MTK平台获得IMSI号是比较容易获得的,但是在模拟器中获得的是16位数字的字符串,网上资料中可以查到IMSI(国际移动用户标识符)不超过15位,即是15位组成的,原因是,在模拟器上的并不是真正的SIM卡,所以,要做真正的测试,还需要烧录到真机上进行一个测试。

MTK 平台获取IMSI号码 以及如何截获系统中的各种消息相关推荐

  1. MTK平台获取本机的SIM卡中IMSI号

    要求在MTK的代码上获得本机上SIM卡的手机号码,查了很多资料后,结果是无法获得,原因是手机号码不是直接存储在SIM卡的,而是信号通过移动商(移动.联通或电信)时绑定的:IMSI是sim卡的一个属性号 ...

  2. mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...

    跟我学虚拟机系统平台相关技术及应用--在CentOS系统中的MySql数 据库系统配置文件中进行配置定义 1.1.1MySql5.6数据库系统的配置文件 1.不同作用范围内的系统配置文件 (1)/et ...

  3. MTK平台 获取本机的SIM卡中IMSI号

    公司MTK平台做开发,老板要求在MTK的代码上获得本机上SIM卡的手机号码,查了很多资料后,结果是无法获得,原因是手机号码不是直接存储在SIM卡的,而是信号通过移动商(移动.联通或电信)时绑定的:IM ...

  4. MTK平台获取和修改GPIO状态

    一.MTK 1.节点位置 在MTK平台,我们可以通过cat节点(mt_gpio)来查看对应的状态.不同的平台,该管脚对应的位置也是不同的,建议直接进入手机目录查看: adb shell find -n ...

  5. 【解决方案】国标GB28181级联EasyGBS及RTSP/SDK/Ehome协议平台EasyCVR在营业厅人脸识别监控系统中的应用

    一.背景 随着通信行业的高速发展,用户规模越来越大,技术也日趋复杂,办理通信业务的营业厅也越来越多.现各营业厅存在区域范围广泛,且较分散等特点,随着技术的飞速发展,营业厅安防正逐渐走进高清化.智能化. ...

  6. php获取当前设备,Linux_在Linux系统中使用lsblk和blkid显示设备信息的方法,今天我们将会向你展示如何使 - phpStudy...

    在Linux系统中使用lsblk和blkid显示设备信息的方法 今天我们将会向你展示如何使用 lsblk 和 blkid 工具来查找关于块设备的信息,我们使用的是一台安装了 CentOS 7.0 的机 ...

  7. 获取android com包名,Android系统中获取进程(和顶端包名)

    概要: android L前我们可以使用 getRunningTasks(int maxNum) maxNum int: The maxNumnumber of entries to return i ...

  8. 获取Linux的方法,CDN Linux系统中获取LDNS的方法

    在Linux命令行模式下,可通过以下方式获取: 方法一: curl -s http://13491234.testns.cdnunion.net/?callback? testns前面的数字输入一个随 ...

  9. linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区

    Veket Linux操作系统具备小巧,占用资源少,便携方便.安装方便,我们可以将其安装到电脑的硬盘,或者虚拟机中体验一把.如果家里有老式的闲置的电脑,将该系统安装到老式电脑,看看电影,上上网,使用下 ...

最新文章

  1. 为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  2. struts+spring+hibernate总结
  3. Android 唯一标识获取
  4. 实例介绍Cocos2d-x开关菜单
  5. 推荐大家一个保护视力的Visual Studio皮肤
  6. 1.13 梯度检验-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  7. 访问tomcat html,访问云服务器tomcat里html界面
  8. 产品迭代的道与术,爆款产品的打造密码 | 周四话产品
  9. CentOS 编译Hadoop 2.6 32位
  10. Tournament CodeForces - 27B(dfs)
  11. 初识ABP vNext(9):ABP模块化开发-文件管理
  12. Photoshop切图学习
  13. 闲鱼对Flutter-Native混合工程解耦的探索
  14. linux报错之no space left on device问题分析
  15. 直播 | 循序渐进 - DM8 数据存储管理
  16. typescript 判断异步执行已经结束_vue进阶系列——用typescript玩转vue和vuex
  17. c# excel vsto 表格偏移Offset
  18. TensorRt - caffe中支持prelu
  19. mysql修改唯一索引
  20. html文字浮雕效果不起作用,CSS3实现文字浮雕效果,镂刻效果,火焰文字

热门文章

  1. 系统服务器性能巡检报告,pc服务器巡检报告
  2. 《月之猎人 (Moon Hunters)》主角设计
  3. 沈阳中小学教材2022春季版
  4. 第2天 C语言32个关键字
  5. Java NIO(四)选择器Selector
  6. PERT(计划评审技术Program Evaluation an Review Technique)
  7. 主成分分析(principal component analysis, PCA)公式
  8. VR几年内会发展成什么样
  9. AURIX Development Studio 使用
  10. 计算机主机的拆卸步骤,电脑清灰详细图文教程解说