1. SIM卡的结构和类型
SIM卡是带有微处理器的智能芯片卡,它的构成是以下几个模块:
--- CPU
--- 程序存储器(ROM)
--- 工作存储器(RAM)
--- 数据存储器(EPROM或E2PROM)
--- 串行通信单元
这五个模块必须集成在一块集成电路中,否则其安全性会受到威胁。因为,芯片间的连线可能成为非法存取和盗用SIM卡的重要线索。
在实际使用中有两种功能相同而形式不同的SIM卡:
(a) 卡片式(俗称大卡)SIM卡,这种形式的SIM卡符合有关IC卡的ISO…7816标准,类似IC卡。
(b) 嵌入式(俗称小卡)SIM卡,其大小只有25mm×15mm,是半永久性地装入到移动台设备中的卡。
两种卡外装都有防水、耐磨、抗静电、接触可靠和精度高的特点。
2.SIM卡的软件特性
SIM卡采用新的单片机及存储器管理结构,因此处理功能大大增强。SIM卡中存有三类数据信息:
(1) 与持卡者相关的信息以及SIM卡将来准备提供的所有业务信息,这种类型的数据存储在根目录下。
(2) GSM应用中特有的信息,这种类型的数据存储在GSM目录下。
(3) GSM应用所使用的信息,此信息可与其它电信应用或业务共享,位于电信目录下。
3.SIM卡中的保密算法及密钥
SIM卡中最敏感的数据是保密算法A3、A8算法、密约Ki、PIN、PUK和Kc。A3、A8算法是在生产SIM卡的同时写入的,一般人都无法读A3、A8算法;HN码可由客户在手机上自己设定;PUK码由运营者持有;Kc是在加密过程中由Ki导出;Ki需要根据客户的IMSI和写卡时用的母钥(Kki),由运营部门提供的一种高级算法DES,即Ki=DES(IMSI,Kki),经写卡机产生并写入SIM卡中,同时要将IMSI、Ki这一对数据送入GSM网路单元AUC鉴权中心。
如何保证Ki在传送过程中安全保密是一件非常重要的事情。Ki在写卡时生成,同时加密,然后进入HLR/AUC后再解密,那么连写卡和HLR/AUC的操作人员也不知道Ki的真实数据。
一般流行的做法是用一高级方程DES对Ki进行加密,DES方程需要一把密钥Kdes,加密和解密都用同一把密钥。由运营部门提供DES方程给HLR/AUC设备供应商,运营部门制定严格的保密制度,管理好密钥Kdes就能保证Ki传递的安全性,此过程见图7-1所示。
图7-1 SIM卡写卡流程
4. 数据和参数
SIM卡中存有数据:ISDN、Ki、PIN、PUK、TMSI、LAI和ICCID(SIM卡号码)。其中ISDN、Ki、PIN、PUK上面已提到;TMSI和LAI是随着客户移动,网路随时写入的;ICCID号码是SIM卡号,它的数据格式定义如下:
898600 9F SS YY G xxxxxX Chk
898600 固定不变
9 代表移动业务接入号的末位
F 代表功能位,暂定为0
SS 代表各省编号
YY 代表编制ICCID时的年号(取后两位)
G 代表SIM卡供应商编号
XXXXXX 由各局自行定义
Chk 校验位
ICCID号码一共20位,采用条形码和数字号码印刷,颜色为黑色,印在SIM卡的反面,即不带芯片的那面。大卡、小卡均印20位,大卡将条形码、数字号码印在左上方,条形码在上,数字号码在下。小卡只在芯片反面印制数字号码,数字号码分四行,每行五位。ICCID的条形码采用交叉二五码。
另外,SIM卡中还存有许多参数,分为GSM系统参数和电信业务参数两类。GSM系统参数一般包括有管理类别、业务表、接入控制BCCH信息、TMSI、IMSI、Kc等;电信业务参数包括有缩位拨号、短消息、话费数据等。
下面按GSM的Phasel(阶段1)和Phase2(阶段2)两种情况对SIM卡的数据格式说明如下:
(1) Phasel
① GSM系统参数
在阶段l时所选GSM系统参数数据项目见表7-1所示。其中,6F38业务表中选有五项开放业务:
表7-1 GSM阶段1系统参数数据所选项
标识符
名称
长度
6FAD
管理(Administrative)
3
6F38
业务表(Service Table)
4
6F07
IMSI
9
6F7B
禁止PLMN(Forbidden PLMN)
12
6F7E
TMSI LAI
11
6F20
Kc,n
9
6F30
PLMN选择(PLMN Selector)
24
6F74
BCCH信息(BCCH Information)
16
6F78
接入控制(Access Control)
2
业务1(Servicel):PIN码取消(PIN Disabling)
业务2(Service2):缩位拨号(AbbreviatedDialling Numbers)
业务4(Service4):短消息存储(Short Message Storage)
业务6(Service6):容量配置参数(Capability Configuration Pa- rameters)
业务7(Service7):PLMN选择(PLMN Selector)
业务3、业务5和业务8在Phase.1中不开放。6F78接入控制采用低级等级。
② 电信业务参数
电信业务所选项目见表7-2所示。
表7-2 GSM阶段1电信业务所选项
标识符
名称
长度
6F3A
缩位拨号
(Abbreviated Dialling Numbers)
50 X 22
6F3D
容量配置参数
(Capability Config Parameters)
1 X 14
6F3C
短消息存储
(Short Message Storage)
5 X176
6F39
话费计数
(Carging Counter)
2
(2) Phase2
① GSM系统参数
在阶段2时GSM系统参数数据所选项目见表7-3所示。其中,6F38业务表在Phasel的基础上增加的业务有:
表7-3 GSM阶段2 系统参数数据所选项
标识符
名称
长度
6F05
语种选择(Language Preferernce)
4
6F07
IMSI
9
6F20
Kc,n
9
6F30
PLMN选择(PLMN Selector)
42
6F31
HPLMN搜索(HPLMN Search)
1
6F38
业务表(Service Table)
4
6F45
小区广播消息标识
(Cell Broad Message ID)
8
6F74
BCCH消息(BCCH Information)
16
6F78
接入控制(Access Control)
2
6F7B
禁止PLMN(Forbidden PLMN)
12
6F7E
TMSI LAI
11
6FAD
管理数据(Admin Data)
3
6FAE
Phase 识别(Phase Ident)
2
业务9(Service9):MSISDN
业务10(Servicelo):扩展1文件(Extension l file)
业务12(servicel2):短消息参数(short Message Parameters)
业务13(Servicel3):最后拨号存储(Last Number Dialled)
业务14(servicel4):小区广播消息识别(cell Broadcasting
Message ldentifier fi1e) .
业务3、业务5、业务8和业务11在Phase2中不开放。6F78接入控制采用低级等级。
② 电信业务参数
电信业务所选项目见表7-4所示。
表7-4 GSM阶段2电信业务所选项
标识符
名称
6F3A
缩位拨号(Abbreviated Dialling)
6F3C
短消息存储(Short Message Storage)
6F3D
容量配置参数(Capability Config.)
6D40
MSISDN
6F42
短消息存储参数(SMS Paramters)
6F43
短消息存储状态(SMS Status)
6F44
最后拨号存储(Last Number Dialled)
6F4A
扩展1文件(Extension 1 file)
5. SIM卡的寿命
SIM卡的使用是有一定年限的。一般来说,它的物理寿命是取决于客户的插拔次数,约在1万次左右;而集成电路芯片的寿命取决于数据存储器的写入次数,不同厂家其指标有所不同,就Motorola经试验室试验约5万次左右。SIM卡的平均寿命约为4年左右。
Home是Android设备开启后第一个与用户交互的应用程序。在其他应用程序运行于前台时,Home也将一直运行于后台。当其他应用程序都退出 时,又要返回到Home的用户界面以供用户进行下一步操作,如在应用程序列表中选择要启动的程序。除了应用程序列表,在Android系统自带的Home 程序Launcher当中,还有一块类似于PC上桌面概念的区域,如图下图所示。
在屏幕分辨率为320×480像素的Android设备上,竖屏时这个桌面由3块320×400像素的区域构成,而每块区域即每屏又被划分成了16 个80×100像素的单元格;横屏时则是由3块424×296像素的区域构成,每屏也是被划分成了16个单元格,但每个单元格的大小为106×74像素。
在Launcher的桌面可以添加三种类型的组件,分别是快捷图标、实时文件夹(Live Folder)和桌面控件(Home Screen Widget),其中快捷图标和实时文件夹在桌面区域上均只占一个单元格的大小,而桌面控件则根据功能需要占用一个或多个单元格。应用程序设计好了这些组件以后,用户可以根据需要自主增加或删除组件,以方便执行常用的操作和实时的了解信息。
在一个函数当中我多次调用,想多次触发notification,可是只有第一次可以以后的都不管用了
protected void displayNotification(String response) { Intent intent = new Intent(context, testActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); Notification notification = new Notification(R.drawable.icon, "Upload Started", System.currentTimeMillis()); notification.setLatestEventInfo(context, "Upload", response, pendingIntent); nManager.notify((int)System.currentTimeMillis(), notification); }
解决办法呢 是不要用Intent.FLAG_ACTIVITY_NEW_TASK,而要用PendingIntent.FLAG_UPDATE_CURRENT
或者 FLAG_ONE_SHOT