TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。
TelephonyManager类的对象可以通过
Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取
对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。

在文件AndroidManifest.xml中添加权限
其他方法具体使用方法请查看API 文档TelephonyManager中方法说明。

在文件
AndroidManifest.xml
中添加权限 
<uses-permission android:name= "android.permission.READ_PHONE_STATE"/>

以下列出TelephonyManager类所有方法及说明:

  1. package
  2. com.ljq.activity;
  3. import  java.util.List;
  4. import  android.app.Activity;
  5. import  android.content.Context;
  6. import  android.os.Bundle;
  7. import  android.telephony.CellLocation;
  8. import  android.telephony.NeighboringCellInfo;
  9. import  android.telephony.TelephonyManager;
  10. public  class  TelephonyManagerActivity  extends  Activity {
  11. @Override
  12. public  void  onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. TelephonyManager tm   =  (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  16. /**
  17. * 返回电话状态
  18. *
  19. * CALL_STATE_IDLE 无任何状态时
  20. * CALL_STATE_OFFHOOK 接起电话时
  21. * CALL_STATE_RINGING 电话进来时
  22. */
  23. tm.getCallState();
  24. //   返回当前移动终端的位置
  25. CellLocation location   =   tm.getCellLocation();
  26. //   请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。
  27. location.requestLocationUpdate();
  28. /**
  29. * 获取数据活动状态
  30. *
  31. * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据
  32. * DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
  33. * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据
  34. * DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受
  35. */
  36. tm.getDataActivity();
  37. /**
  38. * 获取数据连接状态
  39. *
  40. * DATA_CONNECTED 数据连接状态:已连接
  41. * DATA_CONNECTING 数据连接状态:正在连接
  42. * DATA_DISCONNECTED 数据连接状态:断开
  43. * DATA_SUSPENDED 数据连接状态:暂停
  44. */
  45. tm.getDataState();
  46. /**
  47. * 返回当前移动终端的唯一标识
  48. *
  49. * 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID
  50. */
  51. tm.getDeviceId();
  52. //   返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。
  53. tm.getDeviceSoftwareVersion();
  54. //   返回手机号码,对于GSM网络来说即MSISDN
  55. tm.getLine1Number();
  56. //   返回当前移动终端附近移动终端的信息
  57. List < NeighboringCellInfo>  infos   =  tm.getNeighboringCellInfo();
  58. for(NeighboringCellInfo info:infos){
  59. //
  60. 获取邻居小区号
  61. int   cid   =  info.getCid();
  62. //   获取邻居小区LAC,LAC: 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。
  63. info.getLac();
  64. info.getNetworkType();
  65. info.getPsc();
  66. //  获取邻居小区信号强度
  67. info.getRssi();
  68. }
  69. //返回ISO标准的国家码,即国际长途区号
  70. tm.getNetworkCountryIso();
  71. //   返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
  72. tm.getNetworkOperator();
  73. //  返回移动网络运营商的名字(SPN)
  74. tm.getNetworkOperatorName();
  75. /**
  76. * 获取网络类型
  77. *
  78. * NETWORK_TYPE_CDMA 网络类型为CDMA
  79. * NETWORK_TYPE_EDGE 网络类型为EDGE
  80. * NETWORK_TYPE_EVDO_0 网络类型为EVDO0
  81. * NETWORK_TYPE_EVDO_A 网络类型为EVDOA
  82. * NETWORK_TYPE_GPRS 网络类型为GPRS
  83. * NETWORK_TYPE_HSDPA 网络类型为HSDPA
  84. * NETWORK_TYPE_HSPA 网络类型为HSPA
  85. * NETWORK_TYPE_HSUPA 网络类型为HSUPA
  86. * NETWORK_TYPE_UMTS 网络类型为UMTS
  87. *
  88. * 在中国,联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
  89. */
  90. tm.getNetworkType();
  91. /**
  92. * 返回移动终端的类型
  93. *
  94. * PHONE_TYPE_CDMA 手机制式为CDMA,电信
  95. * PHONE_TYPE_GSM 手机制式为GSM,移动和联通
  96. * PHONE_TYPE_NONE 手机制式未知
  97. */
  98. tm.getPhoneType();
  99. //   返回SIM卡提供商的国家代码
  100. tm.getSimCountryIso();
  101. //   返回MCC+MNC代码 (SIM卡运营商国家代码和运营商网络代码)(IMSI)
  102. tm.getSimOperator();
  103. tm.getSimOperatorName();
  104. //   返回SIM卡的序列号(IMEI)
  105. tm.getSimSerialNumber();
  106. /**
  107. * 返回移动终端
  108. *
  109. * SIM_STATE_ABSENT SIM卡未找到
  110. * SIM_STATE_NETWORK_LOCKED SIM卡网络被锁定,需要Network PIN解锁
  111. * SIM_STATE_PIN_REQUIRED SIM卡PIN被锁定,需要User PIN解锁
  112. * SIM_STATE_PUK_REQUIRED SIM卡PUK被锁定,需要User PUK解锁
  113. * SIM_STATE_READY SIM卡可用
  114. * SIM_STATE_UNKNOWN SIM卡未知
  115. */
  116. tm.getSimState();
  117. //   返回用户唯一标识,比如GSM网络的IMSI编号
  118. tm.getSubscriberId();
  119. //
  120. 获取语音信箱号码关联的字母标识。
  121. tm.getVoiceMailAlphaTag();
  122. //
  123. 返回语音邮件号码
  124. tm.getVoiceMailNumber();
  125. tm.hasIccCard();
  126. //   返回手机是否处于漫游状态
  127. tm.isNetworkRoaming();
  128. //   tm.listen(PhoneStateListener listener, int events) ;
  129. //   解释:
  130. //   IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)
  131. //
  132. IMSI共有15位,其结构如下:
  133. //   MCC+MNC+MIN
  134. //   MCC:Mobile Country Code,移动国家码,共3位,中国为460;
  135. //  MNC:Mobile NetworkCode,移动网络码,共2位
  136. //   在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03
  137. //   合起来就是(也是Android手机中APN配置文件中的代码):
  138. //   中国移动:46000 46002
  139. //   中国联通:46001
  140. //   中国电信:46003
  141. //   举例,一个典型的IMSI号码为460030912121001
  142. //   IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称
  143. //   IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的
  144. //   其组成为:
  145. //   1. 前6位数(TAC)是”型号核准号码”,一般代表机型
  146. //   2. 接着的2位数(FAC)是”最后装配号”,一般代表产地
  147. //   3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号
  148. //   4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用
  149. }
  150. }

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

============================================================

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

        CellLocation cellLocation = telephonyManager.getCellLocation();

          //判断CellLocation类型,是gsm或cdma

          if(cellLocation!=null){

              if(cellLocation instanceof GsmCellLocation){

                  GsmCellLocation gsmCellLocation = (GsmCellLocation)cellLocation;

                  gsmCellLocation.getCid();

                  gsmCellLocation.getLac();

              }else if(cellLocation instanceof CdmaCellLocation){

                  CdmaCellLocation cdmaCellLocation = (CdmaCellLocation)cellLocation;

                  cdmaCellLocation.getBaseStationLatitude();

                  cdmaCellLocation.getBaseStationLongitude();

              }

          }

Android 获取手机SIM资料详解的更多相关文章

  1. 017 Android 获取手机SIM卡序列号和读取联系人

    1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...

  2. Android 获取手机SIM卡运营商

    直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...

  3. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  4. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...

  5. Android 之窗口小部件详解--App Widget

    Android 之窗口小部件详解--App Widget  版本号 说明 作者 日期  1.0  添加App Widge介绍和示例  Sky Wang 2013/06/27        1 App ...

  6. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  7. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  8. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  9. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

随机推荐

  1. bzoj1385: [Baltic2000]Division expression

    欧几里得算法.可以发现规律,a[2]作为分母,其他作为分子,必定是最好的选择.判断是否为整数即可. #include<cstdio> #include<cstring> #in ...

  2. [转]vs2010 快捷键大全

    vs2010 快捷键大全 VS2010版快捷键 Ctrl+E,D ----格式化全部代码  Ctrl+E,F ----格式化选中的代码  CTRL + SHIFT + B生成解决方案  CTRL + ...

  3. LeetCode Product of Array Except Self (除自身外序列之积)

    题意:给一个序列nums,要求返回一个序列ans,两序列元素个数相同,ans第i个元素就是除了nums[i]之外所有的数相乘之积. 思路:时间O(n),额外空间O(0). 第一次扫一遍,处理nums[ ...

  4. mysql_insert_id 为什么会返回空值

    如果同时打开了一个以上的数据库资源,如果其中一个资源,没有使用insert语句或没有auto_increment类型的数据,或返回结果恰好为空值时,会导致mysql_insert_id()返回空值. ...

  5. Jquery拖拽原理

    /* onmousedown : 选择元素 onmousemove : 移动元素 onmouseup : 释放元素 */ 查看Demo:拖拽图片 function drag(obj) { obj.on ...

  6. WCF:为 SharePoint 2010 Business Connectivity Services 构建 WCF Web 服务(第 1 部分,共 4 部分)

    转:http://msdn.microsoft.com/zh-cn/library/gg318615.aspx 摘要:通过此系列文章(共四部分)了解如何在 Microsoft SharePoint F ...

  7. HDU 5607 graph 矩阵快速幂 + 快速幂

    这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...

  8. WCF测试工具,post经验

    以前使用WCF的post的时候总是不知道怎么传值,需要注意2方面 1.头可以用Json或者是xml来传值 Content-Type: application/json; charset=utf-8 2 ...

  9. 【转】C++类中对同类对象private成员访问

    私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了 ...

  10. 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数

    题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:首先最先想到的是遍历从1到n的每 ...