转: http://www.apkbus.com/forum.php?mod=viewthread&tid=12768&fromuid=3402

最近要用到读取联系人的功能,那么联系人保存在两个地方,一个是SIM卡,就是我们的手机卡;另一个就是手机本地数据库中保存的联系人信息。大家可以拿出自己的手机,选定某一个联系人,点击功能菜单,你会发现有一个选项是同步到SIM卡或者手机,这样就是说:你可以把联系人只保存在SIM卡上,或者只保存在手机本地数据库中,但是这样,当你的手机没电了,你想把卡放在别人手机上的时候,你的电话号码就很会没有你原来手机本地保存的那些联系人。你当然可以同时保存在SIM卡上和手机本地数据库中。

OK,由此引申出两个重要的地方,第一:如何读取SIM卡的状态,如果读写SIM卡;第二:如何读写手机本地数据库中的联系人数据。我想,这是很基础的功能,任何一个人都要掌握的。我们在模拟器上可以添加联系人,但是请务必注意,这只是保存在手机本地数据库中的联系人,模拟器上是没有SIM卡的,因此,如果要读写SIM卡,就要用真机测试,但是苦于我有一个诺基亚的智能手机了,我又不舍得再买一个Android的手机做测试,因为最便宜的都得一千多,没办法,关于SIM卡的,我没办法测试。我只对手机本地数据库中的联系人做了测试。

好了,我们回到正题。第一步,学会判断SIM卡的状态及其它的信息。可以参看示例代码。

TelephonyManager的应用[取得SIM卡的状态]        
       手机的最主要功用就是打电话,如果没有电信公司提供的SIM卡,就不能正常地拨打电话,那么,我们有什么方法可以取得SIM卡的状态及相关资料呢?
Android API中的TelephonyManager(Android.telephony.TelephonyManager)对象,提供了几个方法可以快速取得SIM卡的状态及相关信息。
    程序中以getSystemService(TELEPHONY_SERVICE)来取得TelephonyManager对象,以TelephonyManager提供的方法来取得SIM卡状态及相关信息,将取得的信息存入自定义的MyAdapter中,最后以setListAdapter()将MyAdpter内的信息显示于ListView中。自定义的Adapter对象,以row_layout.xml作为Layout,程序中依照Layout的设置值来显示信息名称及信息内容。

AndroidManifest.xml
AndroidManifest.xml本身必须要在Activity里设置读取电话状态的权限(Android.permission.READ_ PHONE_STATE)。

在取得SIM卡的相关信息时,有时会因某些情况而取不到值。例如,手机没有插入SIM卡,这时候的返回值可能为null或空白字符串,所以在程序中添加空白与null的检查会是比较保险的做法,以免因此造成系统错误。
程序以TelephonyManager.getSimState()来取得SIM卡的状态,可能出现的返回状态如表

效果图:

Android 获取sim卡运营商信息

TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE); TelephonyManager 的使用 TelephonyManager 提供设备上获取通讯服务信息的入口,应用程序使用这个类的方法来获取电话的服务商或者状态。程序也可以注册一个监听器来监听电话状态的改变。不需要直接实例化这个类,使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。
注意:一些电话信息需要相应的权限。方法无效
getSimOperatorName() Returns the Service Provider Name (SPN). // 获取服务提供商名字,比如电信,联通,移动用下面的方法。

第一种方法: 获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/** 获取SIM卡的IMSI码 * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志, * 储存在SIM卡中,可用于区别移动用户的有效信息。
IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成, * 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成, * 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;
MSIN为移动客户识别码,采用等长11位数字构成。 * 
唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可 */

String imsi = telManager.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″)){ 
//中国电信
} }

第二种方法 
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String operator = telManager.getSimOperator(); 
if(operator!=null){ if(operator.equals(“46000″) || operator.equals(“46002″)|| operator.equals(“46007″)){
//中国移动 
}else if(operator.equals(“46001″)){ 
//中国联通
}else if(operator.equals(“46003″)){ 
//中国电信
} } 
在文件AndroidManifest.xml中添加权限其他方法具体使用方法请查看API 文档TelephonyManager中方法说明。
在文件 AndroidManifest.xml 中添加权限 <uses-permission android:name= "android.permission.READ_PHONE_STATE"/>

TelephonyManager tel = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);
String simOperator = tel.getSimOperator();

IMSI共有15位,其结构如下: MCC+MNC+MIN MCC:Mobile Country Code,移动国家码,共3位,中国为460; MNC:Mobile Network Code,移动网络码,共2位,电信03,移动02,联通GSM 01,一个典型的IMSI号码为460030912121001; MIN共有10位,其结构如下: 09+M0M1M2M3+ABCD 其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别. 
功能                          说明 
getCellLocation() 返回的单元格位置的装置 ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION
getDeviceId() 返回的IMEI / MEID的设备。 如果该设备是GSM设备然后IMEI号将被退回,如果该设备是一个CDMA设备然后MEID 将被退回 READ_PHONE_STATE 
getLine1Number() 返回设备的电话号码(MSISDN号码) READ_PHONE_STATE 
getNetworkOperatorName() 返回注册的网络运营商的名字 
getNetworkOperator() 返回的MCC +跨国公司的注册网络运营商 
getNetworkCountryIso() 返回注册的网络运营商的国家代码 
getSimCountryIso() 返回SIM卡运营商的国家代码 READ_PHONE_STATE 
getSimOperator() 返回SIM卡运营商的单个核细胞数+冶 READ_PHONE_STATE 
getSimOperatorName() 返回SIM卡运营商的名字 READ_PHONE_STATE 
getSimSerialNumber() 返回SIM卡的序列号 READ_PHONE_STATE 
getNetworkType() 返回网络设备可用的类型。 这将是下列其中一个值: 
TelephonyManager.NETWORK_TYPE_UNKNOWN TelephonyManager.NETWORK_TYPE_GPRS TelephonyManager.NETWORK_TYPE_EDGE TelephonyManager.NETWORK_TYPE_UMTS READ_PHONE_STATE getPhoneType() 返回设备的类型。 这将是以下值之一: TelephonyManager.PHONE_TYPE_NONE TelephonyManager.PHONE_TYPE_GSM TelephonyManager.PHONE_TYPE_CDMA READ_PHONE_STATE getSubscriberId() 返回用户识别码(的IMSI)的设备 READ_PHONE_STATE 
getNeighboringCellInfo() 返回NeighboringCellInfo类代表名单相邻小区的信息,如果可用,否则将返回null ACCESS_COARSE_UPDATES

读取SIM卡的状态、sim卡网络相关推荐

  1. Android默认电话卡,Android智能终端SIM卡自动切换方法与流程

    本发明涉及智能终端的技术领域,尤其涉及一种SIM卡的切换方法. 背景技术: 现在的手机等机器基本支持多卡配置,而且现在单卡配置基本已经不能满足人们的日常需求:并且在智能系统的潮流之下,有人喜欢用手机看 ...

  2. 如何区分物联网卡与手机SIM卡

    物联网卡是由三大运营商供给的3G/3G/2G卡,从外型看来与一般的SIM卡全部一样,可是从作用和收费层面看来,却存有着挺大的区分.目前市面上常常有带著物联网卡标识的纯流量卡上市,进而获得了众多客户的钟 ...

  3. 4g+uim卡是什么卡_uim卡是什么 sim卡槽能不能用uim卡

    4g uim卡是什么卡? 1.天翼UIM卡(4G上网卡),目前仅限于在国内使用,又称普通上网用UIM卡: 2.天翼UIM卡(4G上网卡-全球版),除可以在中国大陆使用外,还可以在境外(含香港.澳门.台 ...

  4. 物联卡与手机SIM卡主要差别有哪些

    针对SIM卡,大家十分了解,换了新机第一件事儿就是把原先的SIM卡插进到智能手机里边去.SIM卡便是大家如今智能手机中个人身份卡,大家通电话.发信息,上外网等都必须用SIM卡开展鉴权和身份识别工作中. ...

  5. 三星android sd卡,神乎其技:大神让三星S7 Edge同时用上SD卡和双SIM卡

    IT之家讯 3月22日消息 三星在今年的S7/S7 Edge手机上增加了支持microSD卡扩展的功能,对于那些手机重度用户而言无疑是一项福音,不过三星S7的microSD卡功能有个尴尬的地方,就是和 ...

  6. 物联网卡与普通的sim卡的区别

    说起物联网卡,相信对于很多人来说都是比较陌生的,不知道物联网卡是什么?不知道物联网卡与普通的sim卡有什么区别.接下来小编来给大家讲解一下吧. 什么是物联网卡? 物联网卡是运营商基于物联网公共服务网络 ...

  7. MTK平台双卡区分SIM卡1和SIM卡2来电通知

    问题描述 MTK平台,双卡双待的手机,当手机来电时,会在顶部栏显示一个来电通知,区分卡1卡2的关键信息是运营商名字,如中国电信,中国移动这种的,所以当两张卡是同一家运营商,这个时候用户就无法区分是那个 ...

  8. SIM卡座与SD卡座的生产标准化要求

    SIM卡座和SD卡座是满足大量使用的SIM卡.SD卡与系统的连接和信息的交换的要求.以SJ/T11166为通用规范规定结构.外型尺寸.性能要求.试验严酷度,引用标准使用最新版本,制订符合要求的详细规范 ...

  9. aix下光纤卡与网卡连接状态查看及网络参数修改

    AIX 下光纤卡使用状态 #fcstat fcs0 FIBRE CHANNEL STATISTICS REPORT: fcs0Device Type: 8Gb PCI Express Dual Por ...

最新文章

  1. mysql smack_super-smack测试mysql性能
  2. 一维码EAN 8简介及其解码实现(zxing-cpp)
  3. 多因子降维法(MDR,Multifactor Dimensionality Reduction )
  4. python显示外部命令_Python 执行外部指令
  5. java后台日期怎么去重,JAVA后台业务实现去重
  6. 1704班3组—高级软件测试作业—如何计算团队成员贡献分
  7. css 删除线_寻创意|线描画:树
  8. 寻找影响免疫浸润细胞的基因(一)
  9. 【微信小程序中的股票分时图、K线图的源代码解析】
  10. Java工程师胜任力素质模型,胜任力故事汇编C47│AspiringMinds:高潜力程序员的胜任力素质模型...
  11. 咸鱼Maya笔记—Maya 热键
  12. 使用刻录机时的注意事项
  13. Voucher Key 相关SELinux
  14. Unraid使用记录:使用Docker与虚拟机
  15. 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
  16. GetTickCount 得到时间进行比较计算遇到的异常
  17. 卖身风波中的考拉员工
  18. 怎么用生活照制作一寸证件照片
  19. 把手账打印成书 把回忆装订成册
  20. 什么是银行的SWIFT代码

热门文章

  1. Centos7下PHP安装gd库
  2. python多线程ftp服务器_一小时学会用Python Socket 开发可并发的FTP服务器!!
  3. Linux最帅版主所经历的面试题
  4. 以太坊开发之搭建宠物商店
  5. 更改Chrome浏览器背景色,颜色自由设置
  6. 关于使用dotnet run之后如何使用命令行停止运行的线程
  7. 使用SmartUpload组件上传文件
  8. servlet映射中url pattern无效
  9. mysql 并没有幻读_MySQL默认隔离级别REPEATABLE-READ并没有解决幻读问题
  10. 列举几个常用的linux命令以及说明?