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