Android 本機號碼的獲取

首先我們來明確幾個概念:

SIM卡存儲的數據可分爲四類:

第一類是固定存放的數據。這類數據在移動電話機被出售之前由SIM卡中心寫入,包括國際移動用戶識別號(IMSI)、鑑權密鑰(KI)、鑑權和加密算法等等。

第二類是暫時存放的有關網絡的數據。如位置區域識別碼(LAI)、移動用戶暫時識別碼(TMSI)、禁止接入的公共電話網代碼等。

第三類是相關的業務代碼,如個人識別碼(PIN)、解鎖碼(PUK)、計費費率等。

第四類是電話號碼簿,是手機用戶隨時輸入的電話號碼。用戶全部資料幾乎都存儲在SIM卡內,因此SIM卡又稱爲用戶資料識別卡。

IMSI是一個唯一的數字, 標識了GSM和UMTS 網絡裏的唯一一個用戶. 它存儲 在手機的SIM卡里,它會通過手機發送到網絡上. IMSI SIM唯一對應

IMEI也是一串唯一的數字, 標識了 GSM 和 UMTS網絡裏的唯一一個手機.它通常被打印在手機裏電池下面的那一面,撥 *#06# 也能看到它. IMEI 設備唯一對應.

1IMEI不存在於SIM卡中,它是手機本身的串號。
2
。通常我們所說的手機號也不存在於SIM卡中,雖然SIM卡中有一個專門存儲SIM卡本身號碼的地方,但是此號碼是通過手工設定的,而且是可以更改的。   SIM卡的識別通常使用IMSI號,這個對於SIM卡是唯一的。

3
。使用SimGetRecordInfo之類的函數獲得SIM卡的IMSI號碼能否成功依賴於設備製造商是否實現了此函數,據我所知在DOPOD的機器上是可以獲得,但是在聯想的機器上卻不行,其他機器沒有。

4
。獲得IMEI以及IMSI可以通過RIL或者TAPI中的LINE操作的函數獲得。

下面給出獲取手機本機號碼的代碼:

       TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);


       String deviceid = tm.getDeviceId();

       String tel = tm.getLine1Number();

       String imei = tm.getSimSerialNumber();

       String imsi = tm.getSubscriberId();

添加權限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />


注意,手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手機號碼的數據寫入到sim卡中。這個就像是一個變量,當移動運營商爲它賦值了,它自然就會有值。不賦值自然爲空。這就是爲什麼很多人得不到本機號碼的原因。


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