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. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章