Android 读取SIM卡参数

Android 读取SIM卡参数


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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部