码迷,mamicode.com
首页 > 移动开发 > 详细

Android 读取SIM卡参数

时间:2016-08-10 14:02:44      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

    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.   

Android 读取SIM卡参数

标签:

原文地址:http://www.cnblogs.com/cyqx/p/5756233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!