Android 读取SIM卡参数

  1. package com.water.activity;
  2. import java.util.List;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.telephony.CellLocation;
  6. import android.telephony.NeighboringCellInfo;
  7. import android.telephony.TelephonyManager;
  8. import android.util.Log;
  9. public class MyList extends Activity {
  10. /**
  11. * android API中的TelephonyManager对象,可以取得SIM卡中的信息
  12. */
  13. private TelephonyManager telMgr;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
  19. if (telMgr.getSimState() == telMgr.SIM_STATE_READY) {
  20. Log.i("MyList", "良好");
  21. } else if (telMgr.getSimState() == telMgr.SIM_STATE_ABSENT) {
  22. Log.i("MyList", "无SIM卡");
  23. } else {
  24. Log.i("MyList", "SIM卡被锁定或未知的状态");
  25. }
  26. Log.i("MyList", "电话状态[0 无活动/1 响铃/2 摘机]:" + getCallState());
  27. Log.i("MyList", "电话方位:" + getCellLocation());
  28. Log.i("MyList", "唯一的设备ID:" + getDeviceId());
  29. Log.i("MyList", "设备的软件版本号:" + getDeviceSoftwareVersion());
  30. Log.i("MyList", "手机号:" + getLine1Number());
  31. Log.i("MyList", "附近的电话的信息:" + getNeighboringCellInfo());
  32. Log.i("MyList", "获取ISO标准的国家码,即国际长途区号:" + getNetworkCountryIso());
  33. Log.i("MyList", "MCC+MNC:" + getNetworkOperator());
  34. Log.i("MyList", "(当前已注册的用户)的名字:" + getNetworkOperatorName());
  35. Log.i("MyList", "当前使用的网络类型:" + getNetworkType());
  36. Log.i("MyList", "手机类型:" + getPhoneType());
  37. Log.i("MyList", "SIM卡的国家码:" + getSimCountryIso());
  38. Log.i("MyList", "获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字:" + getSimOperator());
  39. Log.i("MyList", "服务商名称:" + getSimOperatorName());
  40. Log.i("MyList", "SIM卡的序列号:" + getSimSerialNumber());
  41. Log.i("MyList", "SIM的状态信息:" + getSimState());
  42. Log.i("MyList", "唯一的用户ID:" + getSubscriberId());
  43. Log.i("MyList", "取得和语音邮件相关的标签,即为识别符:" + getVoiceMailAlphaTag());
  44. Log.i("MyList", "获取语音邮件号码:" + getVoiceMailNumber());
  45. Log.i("MyList", "ICC卡是否存在:" + hasIccCard());
  46. Log.i("MyList", "是否漫游:" + isNetworkRoaming());
  47. Log.i("MyList", "获取数据活动状态:" + getDataActivity());
  48. Log.i("MyList", "获取数据连接状态:" + getDataState());
  49. // telMgr.listen(PhoneStateListener listener, int events) ;
  50. // 解释:
  51. // IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)
  52. // IMSI共有15位,其结构如下:
  53. // MCC+MNC+MIN
  54. // MCC:Mobile Country Code,移动国家码,共3位,中国为460;
  55. // MNC:Mobile NetworkCode,移动网络码,共2位
  56. // 在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03
  57. // 合起来就是(也是Android手机中APN配置文件中的代码):
  58. // 中国移动:46000 46002
  59. // 中国联通:46001
  60. // 中国电信:46003
  61. // 举例,一个典型的IMSI号码为460030912121001
  62. // IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称
  63. // IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的
  64. // 其组成为:
  65. // 1. 前6位数(TAC)是”型号核准号码”,一般代表机型
  66. // 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地
  67. // 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号
  68. // 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用
  69. }
  70. /**
  71. * 电话状态:<br/>
  72. * CALL_STATE_IDLE 无任何状态时<br/>
  73. * CALL_STATE_OFFHOOK 接起电话时<br/>
  74. * CALL_STATE_RINGING 电话进来时
  75. *
  76. * @return
  77. */
  78. private int getCallState() {
  79. return telMgr.getCallState();
  80. }
  81. /**
  82. * 返回当前移动终端的位置 <br/>
  83. *
  84. * @return
  85. */
  86. private CellLocation getCellLocation() {
  87. CellLocation location = telMgr.getCellLocation();
  88. // 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。
  89. // location.requestLocationUpdate();
  90. return location;
  91. }
  92. /**
  93. * 唯一的设备ID:<br/>
  94. * 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID<br/>
  95. * 需要权限:android.permission.READ_PHONE_STATE
  96. *
  97. * @return null if device ID is not available.
  98. */
  99. private String getDeviceId() {
  100. return telMgr.getDeviceId();
  101. }
  102. /**
  103. * 返回移动终端的软件版本:<br/>
  104. * 例如:GSM手机的IMEI/SV码。<br/>
  105. *
  106. * @return null if the software version is not available.
  107. */
  108. private String getDeviceSoftwareVersion() {
  109. return telMgr.getDeviceSoftwareVersion();
  110. }
  111. /**
  112. * 手机号:<br/>
  113. * 对于GSM网络来说即MSISDN
  114. *
  115. * @return null if it is unavailable.
  116. */
  117. private String getLine1Number() {
  118. return telMgr.getLine1Number();
  119. }
  120. /**
  121. * 返回当前移动终端附近移动终端的信息:<br/>
  122. * 类型:List<NeighboringCellInfo><br/>
  123. * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
  124. *
  125. * @return
  126. */
  127. private List<NeighboringCellInfo> getNeighboringCellInfo() {
  128. // List<NeighboringCellInfo> infos = telMgr.getNeighboringCellInfo();
  129. // for (NeighboringCellInfo info : infos) {
  130. // // 获取邻居小区号
  131. // int cid = info.getCid();
  132. //
  133. // // 获取邻居小区LAC,LAC:
  134. // // 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。
  135. // info.getLac();
  136. // info.getNetworkType();
  137. // info.getPsc();
  138. //
  139. // // 获取邻居小区信号强度
  140. // info.getRssi();
  141. // }
  142. return telMgr.getNeighboringCellInfo();
  143. }
  144. /**
  145. * 获取ISO标准的国家码,即国际长途区号。<br/>
  146. * 注意:仅当用户已在网络注册后有效。<br/>
  147. * 在CDMA网络中结果也许不可靠。<br/>
  148. *
  149. * @return
  150. */
  151. private String getNetworkCountryIso() {
  152. return telMgr.getNetworkCountryIso();
  153. }
  154. /**
  155. * MCC+MNC(mobile country code + mobile network code)<br/>
  156. * 注意:仅当用户已在网络注册时有效。<br/>
  157. * 在CDMA网络中结果也许不可靠。<br/>
  158. *
  159. * @return
  160. */
  161. private String getNetworkOperator() {
  162. return telMgr.getNetworkOperator();
  163. }
  164. /**
  165. * 按照字母次序的current registered operator(当前已注册的用户)的名字<br/>
  166. * 注意:仅当用户已在网络注册时有效。<br/>
  167. * 在CDMA网络中结果也许不可靠。
  168. *
  169. * @return
  170. */
  171. private String getNetworkOperatorName() {
  172. return telMgr.getNetworkOperatorName();
  173. }
  174. /**
  175. * 当前使用的网络类型:<br/>
  176. * NETWORK_TYPE_UNKNOWN 网络类型未知 0<br/>
  177. * NETWORK_TYPE_GPRS GPRS网络 1<br/>
  178. * NETWORK_TYPE_EDGE EDGE网络 2<br/>
  179. * NETWORK_TYPE_UMTS UMTS网络 3<br/>
  180. * NETWORK_TYPE_HSDPA HSDPA网络 8<br/>
  181. * NETWORK_TYPE_HSUPA HSUPA网络 9<br/>
  182. * NETWORK_TYPE_HSPA HSPA网络 10<br/>
  183. * NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4<br/>
  184. * NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5<br/>
  185. * NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6<br/>
  186. * NETWORK_TYPE_1xRTT 1xRTT网络 7<br/>
  187. * 在中国,联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO<br/>
  188. *
  189. * @return
  190. */
  191. private int getNetworkType() {
  192. return telMgr.getNetworkType();
  193. }
  194. /**
  195. * 返回移动终端的类型:<br/>
  196. * PHONE_TYPE_CDMA 手机制式为CDMA,电信<br/>
  197. * PHONE_TYPE_GSM 手机制式为GSM,移动和联通<br/>
  198. * PHONE_TYPE_NONE 手机制式未知<br/>
  199. *
  200. * @return
  201. */
  202. private int getPhoneType() {
  203. return telMgr.getPhoneType();
  204. }
  205. /**
  206. * 获取ISO国家码,相当于提供SIM卡的国家码。
  207. *
  208. * @return Returns the ISO country code equivalent for the SIM provider's
  209. *         country code.
  210. */
  211. private String getSimCountryIso() {
  212. return telMgr.getSimCountryIso();
  213. }
  214. /**
  215. * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.<br/>
  216. * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
  217. *
  218. * @return Returns the MCC+MNC (mobile country code + mobile network code)
  219. *         of the provider of the SIM. 5 or 6 decimal digits.
  220. */
  221. private String getSimOperator() {
  222. return telMgr.getSimOperator();
  223. }
  224. /**
  225. * 服务商名称:<br/>
  226. * 例如:中国移动、联通<br/>
  227. * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
  228. *
  229. * @return
  230. */
  231. private String getSimOperatorName() {
  232. return telMgr.getSimOperatorName();
  233. }
  234. /**
  235. * SIM卡的序列号:<br/>
  236. * 需要权限:READ_PHONE_STATE
  237. *
  238. * @return
  239. */
  240. private String getSimSerialNumber() {
  241. return telMgr.getSimSerialNumber();
  242. }
  243. /**
  244. * SIM的状态信息:<br/>
  245. * SIM_STATE_UNKNOWN 未知状态 0<br/>
  246. * SIM_STATE_ABSENT 没插卡 1<br/>
  247. * SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2<br/>
  248. * SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3<br/>
  249. * SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4<br/>
  250. * SIM_STATE_READY 就绪状态 5
  251. *
  252. * @return
  253. */
  254. private int getSimState() {
  255. return telMgr.getSimState();
  256. }
  257. /**
  258. * 唯一的用户ID:<br/>
  259. * 例如:IMSI(国际移动用户识别码) for a GSM phone.<br/>
  260. * 需要权限:READ_PHONE_STATE
  261. *
  262. * @return
  263. */
  264. private String getSubscriberId() {
  265. return telMgr.getSubscriberId();
  266. }
  267. /**
  268. * 取得和语音邮件相关的标签,即为识别符<br/>
  269. * 需要权限:READ_PHONE_STATE
  270. *
  271. * @return
  272. */
  273. private String getVoiceMailAlphaTag() {
  274. return telMgr.getVoiceMailAlphaTag();
  275. }
  276. /**
  277. * 获取语音邮件号码:<br/>
  278. * 需要权限:READ_PHONE_STATE
  279. *
  280. * @return
  281. */
  282. private String getVoiceMailNumber() {
  283. return telMgr.getVoiceMailNumber();
  284. }
  285. /**
  286. * ICC卡是否存在
  287. *
  288. * @return
  289. */
  290. private boolean hasIccCard() {
  291. return telMgr.hasIccCard();
  292. }
  293. /**
  294. * 是否漫游:(在GSM用途下)
  295. *
  296. * @return
  297. */
  298. private boolean isNetworkRoaming() {
  299. return telMgr.isNetworkRoaming();
  300. }
  301. /**
  302. * 获取数据活动状态<br/>
  303. * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据<br/>
  304. * DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据<br/>
  305. * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据<br/>
  306. * DATA_ACTIVITY_NONE 数据连接状态:活动,但无数据发送和接受<br/>
  307. *
  308. * @return
  309. */
  310. private int getDataActivity() {
  311. return telMgr.getDataActivity();
  312. }
  313. /**
  314. * 获取数据连接状态<br/>
  315. * DATA_CONNECTED 数据连接状态:已连接<br/>
  316. * DATA_CONNECTING 数据连接状态:正在连接<br/>
  317. * DATA_DISCONNECTED 数据连接状态:断开<br/>
  318. * DATA_SUSPENDED 数据连接状态:暂停<br/>
  319. *
  320. * @return
  321. */
  322. private int getDataState() {
  323. return telMgr.getDataState();
  324. }
  325. }

Android 系统(260)---Android 读取SIM卡参数相关推荐

  1. Android系统源码学习-SIM卡(二)

    随着手机的普及,大家从非智能机到智能机的转变,从没有操作系统的定制机到智能手机,但唯一没有变的是,手机中的SIM,今天我们就来谈谈手机中SIM卡相关的内容.在日常生活中,SIM卡就是一张很小的卡片,但 ...

  2. Android 系统(261)---SIM卡不识或者掉卡简单分析

    SIM卡不识或者掉卡简单分析 1. 识卡大体过程 2.不识卡问题 不识卡的主要原因:  ①Modem发生错误,异常或者重启.  ②没有收到卡回的ATR  ③有收到卡回的ATR,但是后面跟卡通信出现异常 ...

  3. android获取sim卡手机号码,Android 读取SIM卡联系人

    Android 5.0之前的版本中,系统只支持单卡,可以使用URI -- content://icc/adn 读取到sim卡里的联系人.附:IccProvider(4.4.4_r1) Android ...

  4. Android读取SIM卡ICCID

    方法一,使用TelephonyManager的getSimSerialNumber()获取 TelephonyManager telephonyManager = (TelephonyManager) ...

  5. android如何读取sim卡联系人信息,Android上如何获取手机和sim卡的联系人信息

    需求很明确,获取手机和sim的联系人信息.接口设计也很简介 public interface OnFetchContactsListener { void onFetcherContactsCompl ...

  6. Android NFC源码读取公交卡信息余额和交易记录

    通过NFC的读模式,读取公交卡的余额和交易记录.可以读取深圳通.羊城通.北京卡.八达通.武汉通等. 源码亲测可用放心下载. 源码下载Eclipse版本:Android NFC源码读取公交卡信息余额和交 ...

  7. linux系统读sim卡信息,在Linux下使用串口读取SIM卡上的SMS消息使用C

    试图通过linux中的串口读取sms消息,从一张安装在华为3g USB调制解调器内的SIM卡读取.我必须在屏幕上显示一些短信之前执行脚本.有时它显示不寻常的字符.我想要做的就是使用AT命令,c和串行端 ...

  8. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  9. 读取SIM卡的状态、sim卡网络

    转: http://www.apkbus.com/forum.php?mod=viewthread&tid=12768&fromuid=3402 最近要用到读取联系人的功能,那么联系人 ...

最新文章

  1. 根据字符出现频率排序
  2. SDWebImage使用,图片加载和缓存
  3. VScode+SSH Remote多级连跳配置
  4. 入门响应式Web?看懂这篇文章就够了!——Web前端系列学习笔记
  5. 如何在线查找成千上万的免费电子书
  6. Docker学习笔记之浅谈虚拟化和容器技术
  7. WinFormDataGridView单元格提示和相关应用 之配餐系统的开发
  8. linux yum提示Loaded plugins: fastestmirror, security错误的解决方法
  9. HDU2080 夹角有多大II【数学】
  10. 运营破局,四步完成从0到1
  11. Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)...
  12. 原画学习步骤,零基础一步步学原画!
  13. Logistic回归公式推导和代码实现和Python中的sklearn.linear_model.LogisticRegression 的参数
  14. virtualbox win7虚拟机启动exe提示“DX11 could not switch resolution”解决方案
  15. 嵌入式开发自救指南(嵌入式怎么高薪基本思路)
  16. Sourcetree中使用cherry-pick
  17. 视频广告播放器(缓存、循环播放)
  18. python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
  19. 著名互联网公司薪酬最全分析!
  20. 扁豆凝集素LCA/LcH填料/小扁豆凝集素-琼脂糖凝胶/双花扁豆凝集素DBA/黑皮扁豆凝集素

热门文章

  1. Linux+varnish安装配置
  2. 7大排序算法详解+java实现
  3. mysql report参数_mysqlreport 使用说明
  4. Windows家庭版远程服务
  5. TCP/IP四层模型与OSI七层模型
  6. linux 使用 /proc 文件系统
  7. python 用selenium自动启动百度并搜索关键词
  8. Spring MVC 学习笔记(整理)
  9. C#中gridView常用属性和技巧介绍
  10. FlvDownloader升级版DownloaderPlus发布