赞
踩
转载自:http://blog.sina.com.cn/s/blog_7e448beb0100w1hl.html 点击打开链接
首先说说要明确的几个概念:
SIM卡存储的数据可分为四类:
第一类是固定存放的数据。这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI)、鉴权密钥(KI)、鉴权和加密算法等等。
第二类是暂时存放的有关网络的数据。如位置区域识别码(LAI)、移动用户暂时识别码(TMSI)、禁止接入的公共电话网代码等。
第三类是相关的业务代码,如个人识别码(PIN)、解锁码(PUK)、计费费率等。
第四类是电话号码簿,是手机用户随时输入的电话号码。用户全部资料几乎都存储在SIM卡内,因此SIM卡又称为用户资料识别卡。
SIM卡唯一标识:IMSI国际移动用户识别码(IMSI:International Mobile Subscriber IdentificationNumber)是区别用户的标志。
注:
IMSI和IMEI的区别:
IMSI是一串唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它存储 在手机的SIM卡里,它会通过手机发送到网络上. IMSI 与SIM唯一对应
IMEI也是一串唯一的数字, 标识了 GSM 和 UMTS网络里的唯一一个手机.它通常被打印在手机里电池下面的那一面,拨 *#06# 也能看到它.IMEI 与设备唯一对应.
1.IMEI不存在于SIM卡中,它是手机本身的串号。
2.通常我们所说的手机号也不存在于SIM卡中,虽然SIM卡中有一个专门存储SIM卡本身号码的地方,但是此号码是通过手工设定的,而且是可以更改的。
3.使用SimGetRecordInfo之类的函数获得SIM卡的IMSI号码能否成功依赖于设备制造商是否实现了此函数,据我所知在DOPOD的机器上是可以获得,但是在联想的机器上却不行,其他机器没有。
4.获得IMEI以及IMSI可以通过RIL或者TAPI中的LINE操作的函数获得。
android开发步骤
1.在文件AndroidManifest.xml中添加权限
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
2.使用TelephoneManager类
- TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
-
- // 获取手机imsi
- String imsi = tm.getSubscriberId();
- if(imsi!=null){
- if(imsi.startsWith("46000") ||imsi.startsWith("46002")){
- //因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
- //中国移动
- }else if(imsi.startsWith("46001")){
- //中国联通
- }else if(imsi.startsWith("46003")){
- //中国电信
- }
- }
-
- // 获取imei
- String imei = tm.getSimSerialNumber();
- // 获取手机号码
- Stringnumber = tm.getLine1Number();
事实上,Build能向我们提供包括 硬件厂商,硬件编号,序列号等很多信息。
例如:
Build.MODEL//手机型号
Build.VERSION.SDK//SDK版本号
Build.VERSION.RELEASE//Firmware/OS 版本号
事实上,Build能向我们提供包括 硬件厂商,硬件编号,序列号等很多信息。
例如:
Build.MODEL//手机型号
Build.VERSION.SDK//SDK版本号
Build.VERSION.RELEASE//Firmware/OS 版本号
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。