SIM卡存儲的數據可分為四類:
第一類是固定存放的數據。這類數據在移動電話機被出售之前由SIM卡中心寫入,包括國際移動用戶識別號(IMSI)、鑒權密鑰(KI)、鑒權和加密算法等等。
第二類是暫時存放的有關網絡的數據。如位置區域識別碼(LAI)、移動用戶暫時識別碼(TMSI)、禁止接入的公共電話網代碼等。
第三類是相關的業務代碼,如個人識別碼(PIN)、解鎖碼(PUK)、計費費率等。
第四類是電話號碼簿,是手機用戶隨時輸入的電話號碼。用戶全部資料幾乎都存儲在SIM卡內,因此SIM卡又稱為用戶資料識別卡。
IMSI是一個唯一的數字, 標識了GSM和UMTS 網絡里的唯一一個用戶. 它存儲 在手機的SIM卡里,它會通過手機發送到網絡上. IMSI 與 SIM唯一對應.
IMEI也是一串唯一的數字, 標識了 GSM 和 UMTS網絡里的唯一一個手機.它通常被打印在手機里電池下面的那一面,撥 *#06# 也能看到它. IMEI 與 設備唯一對應.
1。IMEI不存在於SIM卡中,它是手機本身的串號。
2。通常我們所說的手機號也不存在於SIM卡中,雖然SIM卡中有一個專門存儲SIM卡本身號碼的地方,但是此號碼是通過手工設定的,而且是可以更改的。 SIM卡的識別通常使用IMSI號,這個對於SIM卡是唯一的。
3。使用SimGetRecordInfo之類的函數獲得SIM卡的IMSI號碼能否成功依賴於設備制造商是否實現了此函數,據我所知在DOPOD的機器上是可以獲得,但是在聯想的機器上卻不行,其他機器沒有。
4。獲得IMEI以及IMSI可以通過RIL或者TAPI中的LINE操作的函數獲得。
下面給出獲取手機本機號碼及Sim卡狀態的代碼:
TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = tm.getDeviceId();
String tel = tm.getLine1Number();
String imei = tm.getSimSerialNumber();
String imsi = tm.getSubscriberId();
String simState = tm.getSimState();
添加權限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
注意,手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手機號碼的數據寫入到sim卡中。這個就像是一個變量,當移動運營商為它賦值了,它自然就會有值。不賦值自然為空。這就是為什么很多人得不到本機號碼的原因。
名詞解釋:
IMEI: (International Mobile Equipment Identity)是國際移動設備身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的"電子串號",它與每台手機一一對應,而且該碼是全世界唯一 的。每一只手機在組裝完成后都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被制造生產的廠商所記錄。
IMSI: (InternationalMobileSubscriberIdentificationNumber)國際移動用戶識別碼,是區別移動用戶的標志, 儲存在SIM卡中,可用於區別移動用戶的有效信息。其總長度不超過15位,同樣使用0~9的數字。其中MCC是移動用戶所屬國家代號,占3位數字,中國的 MCC規定為460;MNC是移動網號碼,最多由兩位數字組成,用於識別移動用戶所歸屬的移動通信網;MSIN是移動用戶識別碼,用以識別某一移動通信網 中的移動用戶。