【转】Android 获取本机号码(收集)
SIM卡存儲的數(shù)據(jù)可分為四類:
第一類是固定存放的數(shù)據(jù)。這類數(shù)據(jù)在移動電話機(jī)被出售之前由SIM卡中心寫入,包括國際移動用戶識別號(IMSI)、鑒權(quán)密鑰(KI)、鑒權(quán)和加密算法等等。
第二類是暫時(shí)存放的有關(guān)網(wǎng)絡(luò)的數(shù)據(jù)。如位置區(qū)域識別碼(LAI)、移動用戶暫時(shí)識別碼(TMSI)、禁止接入的公共電話網(wǎng)代碼等。
第三類是相關(guān)的業(yè)務(wù)代碼,如個(gè)人識別碼(PIN)、解鎖碼(PUK)、計(jì)費(fèi)費(fèi)率等。
第四類是電話號碼簿,是手機(jī)用戶隨時(shí)輸入的電話號碼。用戶全部資料幾乎都存儲在SIM卡內(nèi),因此SIM卡又稱為用戶資料識別卡。
?
IMSI是一個(gè)唯一的數(shù)字, 標(biāo)識了GSM和UMTS?網(wǎng)絡(luò)里的唯一一個(gè)用戶.?它存儲在手機(jī)的SIM卡里,它會通過手機(jī)發(fā)送到網(wǎng)絡(luò)上.?IMSI?與?SIM唯一對應(yīng)。從技術(shù)層面而言,手機(jī)的SIM卡上并不會存儲手機(jī)號碼信息,只會存儲IMSI(International Mobile Subscriber Identification Number)。手機(jī)號碼(MSISDN)都是登記在HLR(Home Location Register)中的,在HLR中會把IMSI和MSISDN關(guān)聯(lián)在一起。
IMEI也是一串唯一的數(shù)字, 標(biāo)識了GSM?和?UMTS網(wǎng)絡(luò)里的唯一一個(gè)手機(jī).它通常被打印在手機(jī)里電池下面的那一面,撥?*#06#?也能看到它.?IMEI?與?設(shè)備唯一對應(yīng).
1)IMEI不存在于SIM卡中,它是手機(jī)本身的串號。?
2)通常我們所說的手機(jī)號也不存在于SIM卡中,雖然SIM卡中有一個(gè)專門存儲SIM卡本身號碼的地方,但是此號碼是通過手工設(shè)定的,而且是可以更改的。???SIM卡的識別通常使用IMSI號,這個(gè)對于SIM卡是唯一的。?
3)使用SimGetRecordInfo之類的函數(shù)獲得SIM卡的IMSI號碼能否成功依賴于設(shè)備制造商是否實(shí)現(xiàn)了此函數(shù),據(jù)我所知在DOPOD的機(jī)器上是可以獲得,但是在聯(lián)想的機(jī)器上卻不行,其他機(jī)器沒有。?
4)獲得IMEI以及IMSI可以通過RIL或者TAPI中的LINE操作的函數(shù)獲得。
?
?
下面給出獲取手機(jī)本機(jī)號碼的代碼:
????????TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
????????String deviceid = tm.getDeviceId();
????????String tel = tm.getLine1Number();//手機(jī)號碼
????????String imei = tm.getSimSerialNumber();
????????String imsi = tm.getSubscriberId();?
添加權(quán)限:
?
?
注意,手機(jī)號碼不是所有的都能獲取。只是有一部分可以拿到。這個(gè)是由于移動運(yùn)營商沒有把手機(jī)號碼的數(shù)據(jù)寫入到sim卡中。這個(gè)就像是一個(gè)變量,當(dāng)移動運(yùn)營商為它賦值了,它自然就會有值。不賦值自然為空。這就是為什么很多人得不到本機(jī)號碼的原因。
?
?
????手機(jī)號碼不是所有的都能獲取。只是有一部分可以拿到。這個(gè)是由于移動運(yùn)營商沒有把手機(jī)號碼的數(shù)據(jù)寫入到sim卡中.SIM卡只有唯一的編號,供網(wǎng)絡(luò)與設(shè)備識別那就是IMSI號碼,手機(jī)的信號也可以說是通過這個(gè)號碼在網(wǎng)絡(luò)中傳遞的,并不是手機(jī)號碼。試想,你的SIM卡丟失后,補(bǔ)辦一張新的會換號碼嗎?是不會的.就是因?yàn)樵谀愕氖謾C(jī)號碼對應(yīng)的IMSI號 在移動運(yùn)營商中被修改成新SIM卡的IMSI號碼。?
????那么手機(jī)號為什么有的就能顯示呢??
????這個(gè)就像是一個(gè)變量,當(dāng)移動運(yùn)營商為它賦值了,它自然就會有值。不賦值自然為空。?
對于移動的用戶,手機(jī)號碼(MDN)保存在運(yùn)營商的服務(wù)器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些驗(yàn)證信息。手機(jī)每次入網(wǎng)注冊的時(shí)候,都會以短信的形式將IMSI及驗(yàn)證信息上傳到運(yùn)營商的服務(wù)器,服務(wù)器在完成注冊動作之后,會以短信的形式將注冊的結(jié)果下發(fā)到手機(jī)里。下發(fā)的內(nèi)容會因條件不同而不同。?
????如果服務(wù)器在下發(fā)的短信中,不包含手機(jī)的號碼,手機(jī)是無法取得電話號碼。如果短信中包含了號碼,手機(jī)才會將其緩存,以備他用.此外,對于其他運(yùn)行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能夠取得本機(jī)號碼不太可能。?
????移動神州行,聯(lián)通的卡是可以取到的.動感地帶的取不到.別的卡還沒有試過.?
????能夠讀取SIM卡號的話應(yīng)該有前提.那就是SIM卡已經(jīng)寫入了本機(jī)號碼,不然是無法讀取的。
?
?
網(wǎng)絡(luò)上有朋友提出了下面的解決方案:
給10086發(fā)個(gè)短信就行了,然后獲取發(fā)件箱中的發(fā)件人號碼...反正給10086發(fā)短信或者打電話是免費(fèi)的 ,但是你得注意了?
1、獲取發(fā)件箱中的發(fā)件人號碼后你得把發(fā)件箱中記錄刪除;?
2、就是你還要攔截10086給你回復(fù)的短信,不然會有個(gè)notification顯示在屏幕上方,提示10086發(fā)來個(gè)短信,讓你查看;?
這些都是為了取得本機(jī)號碼的任務(wù)下,但同時(shí)又提高了用戶的體驗(yàn)度...明白嗎??
但是,有很多人說在收到的短信中沒有收件人號碼,所以可能還是取不到手機(jī)號碼(還未測試過)
?
?
?
????中國移動的SIM卡里只有IMSI號碼而沒有存儲手機(jī)號碼,在中國移動的HLR中會有一張映射表,專門用于把用戶手機(jī)SIM卡的IMSI號映射成為用戶的手機(jī)號碼,這就是移動丟卡不丟號的業(yè)務(wù)也就是緣于此,也是一卡多號的原理。而電信CDMA(原來聯(lián)通CDMA)的機(jī)卡合一的手機(jī)卡里會同時(shí)存在IMSI和手機(jī)號碼。
???
?客戶端獲取:在客戶端對移動用戶而言只能夠獲取諸如IMSI、IMEI號等,并不能直接獲得手機(jī)號。而對電信CDMA機(jī)卡合一用戶可以獲取手機(jī)號碼。
?服務(wù)器端獲取:在早期的移動白名單中是能夠獲得明文的手機(jī)號的,最近移動策略變了,手機(jī)號變成了天書般的唯一串號。因此目前從服務(wù)器端直接獲取手機(jī)號也不行了。
????目前能夠想到的能夠相對可靠地自動獲取用戶手機(jī)號的方法只有通過短信方式。
?通過短信方式:讓用戶上行一條短信,通過短信網(wǎng)關(guān)獲取用戶手機(jī)號,從而將用戶id與手機(jī)號綁定
?
from:http://blog.csdn.net/aicpzl/article/details/51655133
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的【转】Android 获取本机号码(收集)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: APP专项测试方法有哪些?
- 下一篇: zipkin配置