每日总结 - Android 读取SIM卡参数

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

 

posted @ 2014-10-18 19:33  冬叶's blog  阅读(1703)  评论(0编辑  收藏  举报