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规范的移动电话中," ...
随机推荐
- moodle笔记之-数据库操作
<?php require_once('../config.php'); // config.php under root folder require_once($CFG->dirroo ...
- linux/windows平台生成随机数的不同方法
linux平台,使用rand.Seed() //rand_linux.go package main import ( "math/rand" "time" ) ...
- Rosenbrock function
w测试最优化算法性能可通过其. https://en.wikipedia.org/wiki/Rosenbrock_function https://zh.wikipedia.org/wiki/Rose ...
- jmeter命令行运行-单节点
jmeter有自己的GUI页面,但是当线程数很多或者现在有很多的测试场景都是基于linux下进行压测,这时我们可以使用jmeter的命令行方式来执行测试,该篇文章介绍jmeter单节点命令运行方式. ...
- HTML5扩展之微数据与丰富网页摘要itemscope, itemtype, itemprop
HTML5扩展之微数据与丰富网页摘要 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpr ...
- Openjudge-NOI题库-和数
题目描述 Description 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和. 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + ...
- nodejs 实现简单的文件上传功能
首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传 ...
- centos 设置删除提示
centos 设置删除.覆盖提示 相信好多用linux的同学都用过cp这个命令来覆盖文件,但是新建的普通用户不会有任何提示,这时候心里就咯噔一下,赶紧看看新文件的是不是传上去了.如果加上提示,是不是就 ...
- vsftp 虚拟用户
首先安装vsftp db-4wiki mkdir -p /opt/ftp 创建用户 sudo useradd virtual -d /opt/ftp -s /bin/false sudo chown ...
- jx problem
Entity: line 37: parser error : xmlParseEntityRef: no nameecho "xxxxxx > /dev/null 2>& ...