MTK平台上,所有插入到手机中的SIM卡的信息都会存储在数据库com.android.providers.telephony中。

原始的数据库

图表 1 SimInfo数据表的结构

从上图示中,我们可以看到siminfo表的大致结构,包含字段:_id, display_name, name_source, number, display_number_format, icc_id, color, slot, operator, data_roaming。Siminfo表的ContentProvider过程在TelephonyProvider类中,完成数据表建立、升级、常规操作(增删改查)等。

图表 2 siminfo的URI

这样,我们就可以通过类似于Uri.parse(“content://telephony/siminfo”)的方式来进行数据库的日常操作了。

代码结构

为使用方便,MTK添加了几个实用类,SimInfoManager(mediatek/frameworks/base/telephony/java/com/mediate/telephony/SimInfoManager.java)和SIMInfo(frameworks/opt/telephony/src/java/android/provider/Telephony.java)来对siminfo表进行操作,先来看一下一个整体的类图:

图表 3 MTK平台管理SIM卡信息的代码结构

在平台上,MTK有两个框架来提供SIM卡信息的访问服务,一个基于SIMInfo,另一个基于SimInfoManager(可能与平台升级有关)。但是,对数据库的访问都是通过SimInfoManager来操作的,SIMInfo类不直接操作数据;其通过SimInfoManager来完成功能;所以在两者之间,会有一个Adapter来完成适配工作。

SimInfoManagerAdp的工作比较简单,就是直接调用SimInfoManager中相同的接口来完成本身的功能,看:

图表 4 SimInfoAdapter的适配工作

SimInfoManager类中的各方法,会根据其需要的功能来进行数据库操作,仅看一例:

图表 5 SimInfoManager进行数据库操作

表中的数据如何插入

在MT6582平台上,MTK添加了一个类来做SIM卡信息的更新:SimInfoUpdate,其主要是针对SIM卡插入、交换、拔除等用户操作来对siminfo表做一些更新操作,并给出相关提示信息,常见的就是我们开机后的SIM卡状态提示。

类中,监听了几个广播消息,基于此来对数据表进行更新。

图表 6 SimInfoUpdate监听的广播

这个类开放出来的接口主要是:updateSimInfoByIccId(String, String, String, String, Boolean):根据形参中SIM卡的iccid,与当前siminfo表中所有有slot_id值的记录做一次比对,确定SIM卡是否交换卡槽或者是新卡;并根据结果来更改(插入或更新)数据表。最后,对于插入新卡、移除SIM卡操作进行设置(设置Color、DefaultName等)和更新。最后向外弹出提示框,并发送广播ACTION_SIM_INFO_UPDATE。

SIM卡信息的管理的更多相关文章

  1. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...

  2. iphone获取sim卡信息

    /* iphone获取sim卡信息 1.加入一个Framework(CoreTelephony.framework). 2.引入头文件 #import <CoreTelephony/CTTele ...

  3. ios开发获取SIM卡信息

    .加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...

  4. Windows mobile 下读取手机SIM卡信息(转)

    Windows mobile 下读取手机SIM卡信息 c#改善 Windows mobile 下读取手机SIM卡信息

  5. 利用电话管理器TelephonyManager获取网络和SIM卡信息

    import java.util.ArrayList;import java.util.HashMap;import java.util.Map; import android.os.Bundle;i ...

  6. Android菜鸟的成长笔记(23)——获取网络和SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...

  7. Android获取SIM卡信息--TelephonyManager

    1>获得TelephonyManager  TelephonyManager telMgr = (TelephonyManager) getSystemService(TELEPHONY_SER ...

  8. 2019/1/9 6系列所有装置编号与SIM卡信息抓取

    一.报错:File "G:/station/6系列装置信息明细.py", line 12, in <module>workbook.save(r'.\6系列装置明细表. ...

  9. SIM卡读卡器的研究与设计

    SIM卡(Subscriber Identity Module).即用户识别模块,是一张符合GSM规范的"智慧卡".SIM卡可以插入任何一部符合GSM规范的移动电话中," ...

随机推荐

  1. CodeForces 711D Directed Roads

    计数,模拟. 首先观察一下给出的图的特点: $1.$一定存在环. $2.$可能存在多个环. 我们对每个环计算方案数,假设环$C$上包含$x$条边,那么把环$C$破坏掉的方案数有${2^x} - 2$种 ...

  2. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)

    前述: 讲的是Repeater,使用的是XML文件读取,没用ADO.NET ,而分页有很多方法,比如用PagedDataSource,或者通过参数在数据源写SQL语句来实现. 页面: <%@ I ...

  3. onkeyup事件只能输入数字,字母,下划线

    <input type="text" onkeyup="value=value.replace(/[\W]/g,'')"/>

  4. [SOJ] can I post the letter?

    1155. Can I Post the letter Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description I am a t ...

  5. ubuntu搭建git服务器

    1.准备两台ubuntu虚拟机,其中一个作为server,另一个作为client.检查是否安装ssh,如果没有安装:sudo apt-get install openssh-server, 然后在se ...

  6. 手动添加PopMenu出现的问题

    最近在github上找了个比较酷的弹出菜单PopMenu用来做分享页面,demo下载运行OK,于是拖进项目中,一编译就呵呵了.... 一看demo目录,原来这还还引用了其他库,于是把pod下面的pop ...

  7. reids配置参数详解

    转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no  默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...

  8. SQL 小笔记

    如何得到字段的类型 select sql_variant_property(ID,'BaseType') from tb

  9. ie6的png24问题

    解决IE6的PNG透明JS插件 DD_belatedPNG 引:http://www.cnblogs.com/cobby/archive/2012/05/11/2495801.html IE6的PNG ...

  10. linux提示语言包

    locale -a 查看可用的语言包.选择中文语言包 echo 'LC_ALL="zh_CN.utf8"' >> /etc/profileecho 'export LC ...