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.      * 電話狀態:<br/> 
  81.      * CALL_STATE_IDLE 無任何狀態時<br/> 
  82.      * CALL_STATE_OFFHOOK 接起電話時<br/> 
  83.      * CALL_STATE_RINGING 電話進來時 
  84.      *  
  85.      * @return 
  86.      */  
  87.     private int getCallState() {  
  88.         return telMgr.getCallState();  
  89.     }  
  90.   
  91.     /** 
  92.      * 返回當前移動終端的位置 <br/> 
  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:<br/> 
  107.      * 如果是GSM網絡,返回IMEI;如果是CDMA網絡,返回MEID<br/> 
  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.      * 返回移動終端的軟件版本:<br/> 
  118.      * 例如:GSM手機的IMEI/SV碼。<br/> 
  119.      *  
  120.      * @return null if the software version is not available. 
  121.      */  
  122.     private String getDeviceSoftwareVersion() {  
  123.         return telMgr.getDeviceSoftwareVersion();  
  124.     }  
  125.   
  126.     /** 
  127.      * 手機號:<br/> 
  128.      * 對於GSM網絡來說即MSISDN 
  129.      *  
  130.      * @return null if it is unavailable. 
  131.      */  
  132.     private String getLine1Number() {  
  133.         return telMgr.getLine1Number();  
  134.     }  
  135.   
  136.     /** 
  137.      * 返回當前移動終端附近移動終端的信息:<br/> 
  138.      * 類型:List<NeighboringCellInfo><br/> 
  139.      * 需要權限:android.Manifest.permission#ACCESS_COARSE_UPDATES 
  140.      *  
  141.      * @return 
  142.      */  
  143.     private List<NeighboringCellInfo> getNeighboringCellInfo() {  
  144.         // List<NeighboringCellInfo> 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標準的國家碼,即國際長途區號。<br/> 
  164.      * 注意:僅當用戶已在網絡註冊後有效。<br/> 
  165.      * 在CDMA網絡中結果也許不可靠。<br/> 
  166.      *  
  167.      * @return 
  168.      */  
  169.     private String getNetworkCountryIso() {  
  170.         return telMgr.getNetworkCountryIso();  
  171.     }  
  172.   
  173.     /** 
  174.      * MCC+MNC(mobile country code + mobile network code)<br/> 
  175.      * 注意:僅當用戶已在網絡註冊時有效。<br/> 
  176.      * 在CDMA網絡中結果也許不可靠。<br/> 
  177.      *  
  178.      * @return 
  179.      */  
  180.     private String getNetworkOperator() {  
  181.         return telMgr.getNetworkOperator();  
  182.     }  
  183.   
  184.     /** 
  185.      * 按照字母次序的current registered operator(當前已註冊的用戶)的名字<br/> 
  186.      * 注意:僅當用戶已在網絡註冊時有效。<br/> 
  187.      * 在CDMA網絡中結果也許不可靠。 
  188.      *  
  189.      * @return 
  190.      */  
  191.     private String getNetworkOperatorName() {  
  192.         return telMgr.getNetworkOperatorName();  
  193.     }  
  194.   
  195.     /** 
  196.      * 當前使用的網絡類型:<br/> 
  197.      * NETWORK_TYPE_UNKNOWN 網絡類型未知 0<br/> 
  198.      * NETWORK_TYPE_GPRS GPRS網絡 1<br/> 
  199.      * NETWORK_TYPE_EDGE EDGE網絡 2<br/> 
  200.      * NETWORK_TYPE_UMTS UMTS網絡 3<br/> 
  201.      * NETWORK_TYPE_HSDPA HSDPA網絡 8<br/> 
  202.      * NETWORK_TYPE_HSUPA HSUPA網絡 9<br/> 
  203.      * NETWORK_TYPE_HSPA HSPA網絡 10<br/> 
  204.      * NETWORK_TYPE_CDMA CDMA網絡,IS95A 或 IS95B. 4<br/> 
  205.      * NETWORK_TYPE_EVDO_0 EVDO網絡, revision 0. 5<br/> 
  206.      * NETWORK_TYPE_EVDO_A EVDO網絡, revision A. 6<br/> 
  207.      * NETWORK_TYPE_1xRTT 1xRTT網絡 7<br/> 
  208.      * 在中國,聯通的3G爲UMTS或HSDPA,移動和聯通的2G爲GPRS或EGDE,電信的2G爲CDMA,電信的3G爲EVDO<br/> 
  209.      *  
  210.      * @return 
  211.      */  
  212.     private int getNetworkType() {  
  213.         return telMgr.getNetworkType();  
  214.     }  
  215.   
  216.     /** 
  217.      * 返回移動終端的類型:<br/> 
  218.      * PHONE_TYPE_CDMA 手機制式爲CDMA,電信<br/> 
  219.      * PHONE_TYPE_GSM 手機制式爲GSM,移動和聯通<br/> 
  220.      * PHONE_TYPE_NONE 手機制式未知<br/> 
  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位的十進制數字.<br/> 
  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.      * 服務商名稱:<br/> 
  251.      * 例如:中國移動、聯通<br/> 
  252.      * SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷). 
  253.      *  
  254.      * @return 
  255.      */  
  256.     private String getSimOperatorName() {  
  257.         return telMgr.getSimOperatorName();  
  258.     }  
  259.   
  260.     /** 
  261.      * SIM卡的序列號:<br/> 
  262.      * 需要權限:READ_PHONE_STATE 
  263.      *  
  264.      * @return 
  265.      */  
  266.     private String getSimSerialNumber() {  
  267.         return telMgr.getSimSerialNumber();  
  268.     }  
  269.   
  270.     /** 
  271.      * SIM的狀態信息:<br/> 
  272.      * SIM_STATE_UNKNOWN 未知狀態 0<br/> 
  273.      * SIM_STATE_ABSENT 沒插卡 1<br/> 
  274.      * SIM_STATE_PIN_REQUIRED 鎖定狀態,需要用戶的PIN碼解鎖 2<br/> 
  275.      * SIM_STATE_PUK_REQUIRED 鎖定狀態,需要用戶的PUK碼解鎖 3<br/> 
  276.      * SIM_STATE_NETWORK_LOCKED 鎖定狀態,需要網絡的PIN碼解鎖 4<br/> 
  277.      * SIM_STATE_READY 就緒狀態 5 
  278.      *  
  279.      * @return 
  280.      */  
  281.     private int getSimState() {  
  282.         return telMgr.getSimState();  
  283.     }  
  284.   
  285.     /** 
  286.      * 唯一的用戶ID:<br/> 
  287.      * 例如:IMSI(國際移動用戶識別碼) for a GSM phone.<br/> 
  288.      * 需要權限:READ_PHONE_STATE 
  289.      *  
  290.      * @return 
  291.      */  
  292.     private String getSubscriberId() {  
  293.         return telMgr.getSubscriberId();  
  294.     }  
  295.   
  296.     /** 
  297.      * 取得和語音郵件相關的標籤,即爲識別符<br/> 
  298.      * 需要權限:READ_PHONE_STATE 
  299.      *  
  300.      * @return 
  301.      */  
  302.     private String getVoiceMailAlphaTag() {  
  303.         return telMgr.getVoiceMailAlphaTag();  
  304.     }  
  305.   
  306.     /** 
  307.      * 獲取語音郵件號碼:<br/> 
  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.      * 獲取數據活動狀態<br/> 
  336.      * DATA_ACTIVITY_IN 數據連接狀態:活動,正在接受數據<br/> 
  337.      * DATA_ACTIVITY_OUT 數據連接狀態:活動,正在發送數據<br/> 
  338.      * DATA_ACTIVITY_INOUT 數據連接狀態:活動,正在接受和發送數據<br/> 
  339.      * DATA_ACTIVITY_NONE 數據連接狀態:活動,但無數據發送和接受<br/> 
  340.      *  
  341.      * @return 
  342.      */  
  343.     private int getDataActivity() {  
  344.         return telMgr.getDataActivity();  
  345.     }  
  346.   
  347.     /** 
  348.      * 獲取數據連接狀態<br/> 
  349.      * DATA_CONNECTED 數據連接狀態:已連接<br/> 
  350.      * DATA_CONNECTING 數據連接狀態:正在連接<br/> 
  351.      * DATA_DISCONNECTED 數據連接狀態:斷開<br/> 
  352.      * DATA_SUSPENDED 數據連接狀態:暫停<br/> 
  353.      *  
  354.      * @return 
  355.      */  
  356.     private int getDataState() {  
  357.         return telMgr.getDataState();  
  358.     }  
  359.   
  360. }
原文鏈接:http://blog.csdn.net/voiceofnet/article/details/7760319

發佈了57 篇原創文章 · 獲贊 17 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章