今天來說一下Android系統中怎麼擷取手機号
一、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();
三、添權重限:
注意:手機号碼不是所有的都能擷取。隻是有一部分可以拿到。這個是由于移動營運商沒有把手機号碼的資料寫入到sim卡中。這個就像是一個變量,當移動營運商為它指派了,它自然就會有值。不指派自然為空。這就是為什麼很多人得不到本機号碼的原因。
四、名詞解釋:
IMEI:(International Mobile Equipment Identity)是國際移動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的"電子串号",它與每台手機一一對應,而且該碼是全世界唯一的。每一隻手機在組裝完成後都将被賦予一個全球唯一的一組号碼,這個号碼從生産到傳遞使用都将被制造生産的廠商所記錄。
IMSI:(InternationalMobileSubscriberIdentificationNumber)國際移動使用者識别碼,是差別移動使用者的标志,儲存在SIM卡中,可用于差別移動使用者的有效資訊。其總長度不超過15位,同樣使用0~9的數字。其中MCC是移動使用者所屬國家代号,占3位數字,中國的MCC規定為460;MNC是移動網号碼,最多由兩位數字組成,用于識别移動使用者所歸屬的移動通信網;MSIN是移動使用者識别碼,用以識别某一移動通信網中的移動使用者
如有需要可以加我Q群【308742428】大家一起讨論技術。
後面會不定時為大家更新文章,敬請期待。
喜歡的朋友可以關注下。