1 SIM卡存储数据类型:
(1)固化数据:SIM卡卡号、国际移动用户识别码(IMSI)、用户加密密钥(Ki)、加密算法(A3、A8)、个人解锁PUK码等。
(2)静态数据:用户接人等级、短消息中心(SMSC)号码、各类业务接人号等。
(3)动态数据:临时移动用户识别(TMSI)码、区域识别(LAI)码、密匙(Kc)、RAND、MS所处基站小区、PIN码和PUN码出错计数、 PIN码开关使能等。
(4)个人数据:本机电话号码、用户电话簿、短信、费率信息、缩位拨号、转移电话号码等
2 UICC、SIM、USIM
UICC Universal Integrated Circuit Card 通用集成电路卡 UICC中可以包括多种逻辑模块
USIM 通用用户标识模块(Universal Subscriber Identity Module,USIM)
SIM 用户标识模块(Subscriber Identity Module,SIM)
USIM可以同时包括USIM和SIM两个逻辑模块,也可以只包括USIM逻辑模块,前者是复合USIM卡,也就是说可以兼容2G与3G终端,后者是纯粹的USIM卡,只能在3G终端中使用,而UICC是定义智能卡物理特性的总称,可以包含多种业务应用,比如USIM、SIM、IP多媒体业务标识模块等。
在这里插入一段代码,开发过程有时候我们会想判断当前是sim卡还是usim卡,源码是这样做的
private int updateEfForIccType(int efid) {
// Check if we are trying to read ADN records
if (efid == IccConstants.EF_ADN) {
if (phone.getIccCard().isApplicationOnIcc(IccCardApplication.AppType.APPTYPE_USIM)) {
return IccConstants.EF_PBR;
}
}
return efid;
}
public boolean isApplicationOnIcc(IccCardApplication.AppType type) {
if (mIccCardStatus == null) return false;
for (int i = 0 ; i < mIccCardStatus.getNumApplications(); i++) {
IccCardApplication app = mIccCardStatus.getApplication(i);//遍历判断应用的类型是否为APPTYPE_USIM
if (app != null && app.app_type == type) {
return true;
}
}
return false;
}
虽然这个方法是不对phone以外代码开放,不过还是可以参考下思路的,还有一种直接从卡上读取属性也可以,只是好像没有标准的AT命令需要芯片厂商自行添加
3 MF DF EF ADF
MF(Master File),也称作主控文件。其他所有的DF和EF都位于MF之下。
DF(Delicated File)一个有许多文件的功能分组,DF只具有头信息,相当于文件地址指针。
EF (Elementary File)基本文件,这个就是真正的文件了,数据内容保存在这里。
与SIM卡文件类型相比,除了有MF,DF,EF文件外,还增加了ADF文件类型即是USIM (Application DF,ADF)
其中EF又分为Linear fixed EF(保存短信,电话号码,邮箱等),Transparent EF(IMSI 一些基本数据),Cyclic EF,所以在代码中看到读取EF文件方法有时候是不一样的。
4 几个和卡相关的类
IccConstants.java 记录位置常量,写几个使用频率高的,比如
static final int EF_ADN = 0x6F3A;
static final int EF_FDN = 0x6F3B;
static final int EF_SDN = 0x6F49;
static final int EF_EXT1 = 0x6F4A;
static final int EF_SMS = 0x6F3C;
IccCardStatus.java 记录SIM卡的状态,如ABSENT, READY,UNKNOW,ETC。其它应用判断卡状态也就是这几个值
IccRecords.java 把它理解成描述卡上文件内容的一个类应该比较合适,
IccProvider.java 这个不需要多解释,对应用而言知道怎么使用它操作数据就可以,通过它拿到的数据已经解析好的了。
上面的内容有些在网上可以找到,有些是android源码中的,这里整理下列出个人觉得对学习sim卡相关知识有些帮助的东东,如果有遗漏的欢迎留言告诉我。