SIM卡信息的管理
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卡信息的管理的更多相关文章
- Android开发之获取手机SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...
- iphone获取sim卡信息
/* iphone获取sim卡信息 1.加入一个Framework(CoreTelephony.framework). 2.引入头文件 #import <CoreTelephony/CTTele ...
- ios开发获取SIM卡信息
.加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...
- Windows mobile 下读取手机SIM卡信息(转)
Windows mobile 下读取手机SIM卡信息 c#改善 Windows mobile 下读取手机SIM卡信息
- 利用电话管理器TelephonyManager获取网络和SIM卡信息
import java.util.ArrayList;import java.util.HashMap;import java.util.Map; import android.os.Bundle;i ...
- Android菜鸟的成长笔记(23)——获取网络和SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx()方法来获取电话网络的相关信息.这些信息包括设备编号.软件版本.网络运营商代号.网络运营商名 ...
- Android获取SIM卡信息--TelephonyManager
1>获得TelephonyManager TelephonyManager telMgr = (TelephonyManager) getSystemService(TELEPHONY_SER ...
- 2019/1/9 6系列所有装置编号与SIM卡信息抓取
一.报错:File "G:/station/6系列装置信息明细.py", line 12, in <module>workbook.save(r'.\6系列装置明细表. ...
- SIM卡读卡器的研究与设计
SIM卡(Subscriber Identity Module).即用户识别模块,是一张符合GSM规范的"智慧卡".SIM卡可以插入任何一部符合GSM规范的移动电话中," ...
随机推荐
- ssh框架的小实例(用户登录)
刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自 ...
- [Q]无矩形外框块参照图形的识别
该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).
- 使用recordmydesktop进行屏幕录像
屏幕录像的功能对于分享游戏攻略.演示电脑软件的操作是必不可少的.在Windows下可能一般的用户就下载盗版的商业软件来做了.而在GNU/Linux操作系统下,则有现成的自由软件可供使用,只不过没有图形 ...
- 可用fidder测试的一些安全测试点
以下是整理的一些常见的安全渗透测试点 1.用工具fidder抓包拦截篡改服务器端返回的代码,导致下级拥有对上级的访问操作权限 以下是公司开发写的用户角色权限页面跳转 修改普通角色跳转的页面为管理员跳转 ...
- java栈内存堆内存和GC相关
java栈内存堆内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存,有着不同的作用.栈内存用来存储局部变量和方法调用.栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属 ...
- Byte Array to Hexadecimal String
Lookup Text: 23,879.41 (20.8X faster) Sentence: 1.15 (23.9X faster) /// <summary> /// Hex stri ...
- ios 点击放大图片,保存至手机相册
直接贴.m文件代码 #import "UIImageView+Scale.h" static CGRect oldframe; @implementation UIImageVie ...
- python安装pip
pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载 # wget "https://pypi.p ...
- ajax对文件上传
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 昨天面试遇到的一道C语言题
楼主之前是做C/C++开发的,今年转到java,hadoop方向了,所以很多C/C++的细节都有些模糊了,碰巧这次面试题中,就出了一道C指针的问题. 问题不算难,但楼主一时之间竟也想不起来答案了... ...