版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要:本文介紹了 android手機(jī)的基礎(chǔ)信息的獲取方法和手機(jī)基礎(chǔ)業(yè)務(wù)(語音和短消息)的開發(fā)方法,基礎(chǔ)信息包括移 動(dòng)網(wǎng)絡(luò)信息、sim卡信息、手機(jī)狀態(tài)信息等,基礎(chǔ)業(yè)務(wù)包括短信發(fā)送和撥打號(hào)碼分析等。最后編寫一段代碼來實(shí)現(xiàn)基礎(chǔ) 信息的獲取、短信的發(fā)送和手機(jī)的撥號(hào),并通過模擬器上的操作進(jìn)行部分功能驗(yàn)證。一、前言具備移動(dòng)通信基礎(chǔ)知識(shí)的讀者們都知道,只要手機(jī)處f開機(jī)的狀態(tài),無論是否處于通話狀態(tài),手機(jī)和移動(dòng)網(wǎng)絡(luò)會(huì)進(jìn) 行很多信息交互。在非通話狀態(tài)時(shí),手機(jī)通常會(huì)有如下動(dòng)作:網(wǎng)絡(luò)尋找和選擇、川戶注冊(cè)、信號(hào)檢測(cè)等:在通話或者數(shù) 據(jù)傳輸時(shí),手機(jī)和移動(dòng)網(wǎng)絡(luò)除了基木的話音數(shù)據(jù)傳輸之外,還耍進(jìn)行如信號(hào)強(qiáng)度監(jiān)聽、數(shù)據(jù)傳輸方向
2、指示、小區(qū)切換、 短信發(fā)送報(bào)告等操作。二. 整體介紹當(dāng)前,大多數(shù)手機(jī)平臺(tái)并未開放上述底層網(wǎng)絡(luò)的接口給開發(fā)者,例如windows mobile只是規(guī)定了 ril(radio layer interface)的一個(gè)標(biāo)準(zhǔn)很多廠商沒有實(shí)現(xiàn)該接口android手機(jī)平臺(tái)提供了 android.telephony和android.telephony.gsm 兩個(gè)package給開發(fā)者使用。這兩個(gè)package提供了手機(jī)基木信息檢測(cè)的api,例如網(wǎng)絡(luò)類型、鏈接狀態(tài)以及手機(jī)號(hào) 碼字符操作工具。在android.telephony.gsm中,有一些gsm網(wǎng)絡(luò)特有的功能,如短信的pdu功能(cdma收發(fā)短信 不是用
3、pdu的)。網(wǎng)絡(luò)接口結(jié)構(gòu)如圖1所示,具體實(shí)現(xiàn)可以看源代碼的hardware/ril/部分。libraries(user space)圖1無線層接口結(jié)構(gòu)框圖在eclipse的package explore (圖2)中我們可以看到,android.telephony構(gòu)成冇:小區(qū)位置,鄰居小區(qū)信息、手機(jī)號(hào)碼格式監(jiān)視、手機(jī)號(hào)碼字符工具、電話狀態(tài)監(jiān)聽、服務(wù)狀態(tài)監(jiān)聽、手機(jī)信息管理。其中鄰居小區(qū)信息的class是1.5版本新增的功能,1.0版本不具備獲取鄰居小區(qū)的方法。在android.telephony.gsm中,除t android平臺(tái)原有的小區(qū)位克和短信class 2外,android平臺(tái)還特別添加了
4、對(duì)3g手機(jī)的usim卡的彩信支持。包括鏈接參數(shù)、信息管理.信息通知、用戶偏好設(shè)置等。ffi android.telephony田 android.telephony.gsms-|oij)celllocation.classs-)oip gsmcelllocation.classs-血 neighboringcelllnfo. class由贏 smsmanager. class田鉉 phonenumberformattingt ext watcher. class 囪齒 smsmessage. classs-|oio phonenumberutils.classs-曲 usimmmsconnec
5、tivityparameters.class田 曲 phonestatelistener.class由氐 usimmmsmanager. classs -loii service5tate.class由血)usimmmsnotification.class田'血 telephonymanager.class 田皈 usimmmsuserpreferences.class圖 2 android.telephony 和 android.telephony.gsm 包結(jié)構(gòu)三. 實(shí)例編寫3.1基礎(chǔ)知識(shí)我們利用上述兩個(gè)package.編寫一段實(shí)際的代碼,來獲取手機(jī)的基礎(chǔ)信息,并實(shí)現(xiàn)短信的發(fā)送和號(hào)
6、碼的撥打。為 了理解獲取的參數(shù)、短信、撥號(hào)的信息,我們首先耍了解一下移動(dòng)通信方面的基礎(chǔ)知識(shí):cell id:移動(dòng)蜂窩小區(qū)編號(hào)。為了能容納大量的用戶,我們町以把一個(gè)地理區(qū)域劃分成許多小區(qū)。運(yùn)營商不是采用單個(gè) 人功率的發(fā)射器,而是每一個(gè)小區(qū)由一個(gè)小功率的基曲(base station)來提供服務(wù)。lac: location area code。位置區(qū)域碼。為了確定移動(dòng)臺(tái)的位置,每個(gè)gsm/plmn的覆蓋區(qū)都被劃分成許多位置 區(qū),lac則用于標(biāo)識(shí)不同的位置區(qū)。rssi: received signal strength indication.,接收的信號(hào)強(qiáng)度指示。無線發(fā)送層概念,用來判定鏈接質(zhì)量。i
7、mei: international mobile equipment ldentityo國際移動(dòng)設(shè)備身份碼。由15位數(shù)字組成的電子串號(hào),它與每臺(tái)手 機(jī)一一對(duì)應(yīng)而且該碼是全世界唯一的。sim卡卡號(hào):sim卡上有20位數(shù)碼。前面6位是國家的代號(hào),笫9、10位是各省的編碼,第11、12位是年號(hào), 笫13位是供應(yīng)商代碼,笫1419位則是用戶識(shí)別碼,第20位是校驗(yàn)位。mcc: mobile country codeo移動(dòng)國家號(hào)碼,由3位數(shù)字紐.成,唯一地識(shí)別移動(dòng)用戶所屈的國家。我國為460。mnc: mobile network coden 移動(dòng)為 00,聯(lián)通為 0仁sms:短消息。一般_則短信能夠容
8、納140字節(jié),也就是約160個(gè)7bit的字符、或是140個(gè)8bit的字符,中文字、 韓文字與日文字這些占2-byte的字符則可容納70個(gè)。(使用unicode系統(tǒng))緊急呼叫:是指用手機(jī)撥打110、119. 120. 999之類的報(bào)警或求救號(hào)碼。這些號(hào)碼的緊急性使各國都規(guī)定它們可 以使川任何當(dāng)時(shí)可用的網(wǎng)絡(luò)。在我國,就算手機(jī)在沒有資費(fèi)的情況下,甚至你連sim k都沒有也可以撥打這些號(hào)碼。3.2權(quán)限設(shè)置在這個(gè)例子中,我們利用telephony庫,實(shí)現(xiàn)了小區(qū)信息、相鄰小區(qū)信息、手機(jī)imei號(hào)、運(yùn)營商等基礎(chǔ)信息的讀取。 為了實(shí)現(xiàn)上述信息的讀取,我們需要在程序中添加權(quán)限(permission)。權(quán)限用來描
9、述是否擁冇做某件事的權(quán)力,當(dāng)應(yīng) 用試圖在沒有權(quán)限的情況卜做受限操作.應(yīng)用將被系統(tǒng)殺掉以警示。在androidmanifestxml屮添加權(quán)限使用語句,格view plaincopy to clipboardprint?1. vusespermission android:name= n android.permissionpermission_name” />在本文的實(shí)例中,用到了f列權(quán)限permissionname權(quán)限功能access. coarse loca tion訪問cellld或wifi熱點(diǎn)來獲取粗略的位置access fine loca tion訪問精確位置(如gps)acc
10、ess. coarse upda tes允許程序獲取位置更新read phone state訪問電話狀態(tài)send sms允許發(fā)短信call piione允許撥打電話3.3代碼編寫我們可以通過如下語句獲得移動(dòng)網(wǎng)絡(luò)的基礎(chǔ)信息:view plain copy to clipboardprint?gsmcelllocation gel = new gsmcelllocation(); cid = gcl.getcid(); /獲取小區(qū) 號(hào) lid = gcl.getlac(); 獲収lac neighboringcellinfo nbinfo =new neighboringcelllnfo(); n
11、bid = nbinfo.get cid(); 獲取鄰居小區(qū)號(hào)nbrssi = nbinfo.getrssi(); /獲取鄰居小區(qū)信號(hào)強(qiáng) 度 servicestate ss = new servicestate(); oname = ss.get operator alphal on g();獲取運(yùn)營商名稱onum = ss.getoperatornumeric(); 獲取運(yùn)營商編號(hào) rm = (ss.getroaming()? nyesw:mnon); 漫游指示通過如下語句來獲得手機(jī)的基礎(chǔ)信息:view plain copy to clipboardprint?1. telephonyman
12、ager tm = (telephonymanager)getsystemservice(telephony_s ervice); callstate = tm.getcallstate(); 通話狀態(tài) did = tm.getdeviceld(); 設(shè)> i mei 號(hào) inum = tm.getlinel number(); 線路 1 號(hào)碼 simname = tm. get sim operator nam e(); sim 卡運(yùn)營商號(hào)碼 subid = tm.getsubscriberld(); 撥號(hào)者id simnum = tm.getsimserialnumber(); /s
13、im 卡序列號(hào) string networkcountrylso = t m. get net workcountry i so(); 國家 號(hào) string networkoperator = tm.getnetworkoperator(); 網(wǎng)絡(luò) 號(hào) int networktype = tm.getnetworktype(); /網(wǎng)絡(luò)類 型 int simstate = tm.getsimstate(); /sim 卡狀態(tài)通過在按鈕響應(yīng)屮添加下列語句,來實(shí)現(xiàn)短信的發(fā)送:view plain copy to clipboardpri nt?1. string number = et1 .ge
14、ttext().tostring(); /從文木框et1 屮茯取接收方兮 碼 string msg = et2.gettext().tostring(); 從文本框et2 中獲取短信消 息 smsmanager sms = smsmanager.getdefault(); 新建短信對(duì)象 try pending intent pi = pen dinglnte nt.getbroadcast(sms.this, 0, new intent (),0); 新建一個(gè)pendingintent實(shí)例,用來傳遞短信發(fā)送情況 sms.sendtextmessage(number, null, msg, pi
15、, null); /發(fā)送短信 toast.maketext(sms.this,"發(fā)送成功",toast.length_long).show(); catch (exception e) toast.maketext(sms.t his,h發(fā)送失敗nm+ e.getmessage().toast丄ength_long).show(); 短f,;發(fā)送方法:public void sendtextmessage (string destinationaddress, string scaddress, string text,pendingintent sentintent, p
16、endingintent delivery intent) throws: hlegalargumentexceptio n ,具體參數(shù)含義如下:參數(shù)名稱參數(shù)含義destinationaddtess收件人地址scaddress短信屮心號(hào)碼,空為默認(rèn)屮心號(hào)碼sentlntent當(dāng)消息發(fā)出時(shí),成功或者失敗的信息報(bào)告通過 pendingintent來廣播。成功發(fā)送時(shí)返回 result.ok,發(fā)送失敗時(shí)返回錯(cuò)誤信息。若該參數(shù) 為空,則該intent會(huì)被所有程序檢查一遍,這樣 會(huì)導(dǎo)致發(fā)送時(shí)間延長。deliveryintent若該intent非空,當(dāng)消息發(fā)送到收件人時(shí), pendingintent 會(huì)被廣
17、播。t11egalargumentexception如果收件人或者信息內(nèi)容為空,拋出“參數(shù)錯(cuò)誤” 的異常。在android.telephony中,at以使用電話號(hào)碼處理工貝包phonenumberlltils對(duì)-仲數(shù)字和字符進(jìn)行提取、分析、判斷,該類的貝體方法見圖3。bf isl2key(char);1 isdialable(char) isemerge 仃匚 ynumber(stri ng)c? isglobalphonenumber(string) isisodigit(char);1 isnon separator(char)暫 isreallydialable(char)2 issta
18、rtspostdial(char) | iswellformedsmsaddressfstring).圖3 phonenumberutils號(hào)碼處理類的方法為了通過代碼實(shí)現(xiàn)撥號(hào)呼叫,可以采用調(diào)用intent來跳轉(zhuǎn)到撥號(hào)盤或者直接進(jìn)行呼叫。在這里用到了 action_call 和action_dial來進(jìn)行activity的跳轉(zhuǎn)。在下面實(shí)例代碼中,利用號(hào)碼工具對(duì)所撥打的號(hào)碼進(jìn)行格式判斷并呼叫,如 果是緊急號(hào)碼,直接呼出;如果是普通號(hào)碼,跳轉(zhuǎn)到撥號(hào)盤再確認(rèn)呼叫:view plain copy to clipboardprint?i1. string number = et1 .gettext().
19、tostring();2. 從文本框et1中獲取接收方號(hào)碼3. if (phonenumberutils.isemergencynumber(number)4. 5. toast.maketext(sms.this,"緊急呼叫! ”,toast丄ength_long).show();6. /判斷緊急呼叫7. startactivity(new lntent(lntent.action call, uri.parse("tel:"+ number);8. /緊急呼叫時(shí)直接呼出9 10. else if (phonenumberlltils.isglobalphone
20、number(number)11. /判斷無效兮碼12. startactivity(new lntent(lntent.action_dial, uri.parse(ntel:"+ number);13. /普通呼叫時(shí)調(diào)用撥號(hào)盤再確認(rèn)呼叫14. else toast.maketext(sms.this,"無效號(hào)碼”,toast.length_long).show();四、程序測(cè)試4.1基礎(chǔ)信息測(cè)試將所獲取到的手機(jī)基礎(chǔ)信息變雖在textview上顯示,紂到效果如圖4:中國移動(dòng)& 11:168川tele4cell id = -1 lac id *1 neighbor
21、id -1 neighbor g = 99 call state = 0 = null o num 5 null device id 000000000000000 roaming $ noline! number =slm operator name = cmcc subscriber id = nullsim serial number» 89014103211118510720 network country iso cnnetwork operator « 46000 network type = 0 sim state =
22、5圖4無呼叫時(shí)程序運(yùn)行結(jié)果由于程序在模擬器上進(jìn)行測(cè)試,所以獲取的小區(qū)和lac都是-1,鄰居小區(qū)信號(hào)強(qiáng)度是99。在實(shí)際情況下,信號(hào)強(qiáng) 度的取值范闌是031,根據(jù)換算公dbm = -113 + 2xrssl rssi為0,則信號(hào)強(qiáng)度為-113dbm或更?。籸ssi為 31,則信號(hào)強(qiáng)度為-51dbm或更大。運(yùn)營商代碼和手機(jī)號(hào)碼都可以正常顯示。call.state 為0,代表手機(jī)處于空閑狀態(tài), sim_state值為5,代表sim卡處于ready狀態(tài)。接下來我們通過手機(jī)進(jìn)行撥號(hào)測(cè)試,來測(cè)試call_state的顯示正確與否。在模擬器中,我們可以使用如卞撥號(hào)流程, 撥號(hào)結(jié)果如圖5所示:1. 運(yùn)行cmd2
23、. 連接:telnet localhost 55543通話命令:gsm call 10086 (該號(hào)碼為主叫號(hào)碼,即在被叫屏幕上來電顯示的號(hào)碼)。另外,發(fā)送短信的 命令是:sms sendhello,this is a message。圖5來電時(shí)屏幕顯示電話撥入之厲,在eclipse中再次運(yùn)行該程序.可以看到call.state變成了 1。在接聽之后.左上角出現(xiàn)電話的小圖 標(biāo),可以看到call.state變成了 2,見圖6。在sdk中查到call.state的各種值的定義,可以驗(yàn)證剛才運(yùn)行結(jié)正確的。chtrut mobile中國移動(dòng)乜11:23c3|telecell
24、id = -1 lac id1 neighbor id = -1 neighbor rssl 二 99 call state - 1 « null o.num - mill device id - 000000000000000 roaming no llnel number =slm operator name = cmcc subscriber id » nullsim serial number 89014103211118510720 network country iso = cnnetwork operator = 46000 network type 0 sim state = 5k 11:200川tele4cell id 二-1 lac id = -1 neighbor id j neighbor rs$i 99 call state - 2 o.rwme 二 null o num = null device id 000000000000000 roaming - no line! number =ym operacor name = cmcc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 春 朱自清教育課件
- 遼寧省遼陽市第一中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期第二次學(xué)科素養(yǎng)能力訓(xùn)練(期中)地理試卷(含答案)
- 河南省許昌市長葛市2024-2025學(xué)年九年級(jí)上學(xué)期期中質(zhì)量監(jiān)測(cè)物理試題(含答案)
- 11 A受迫振動(dòng) 共振 基礎(chǔ)版2025新課改-高中物理-選修第1冊(cè)(21講)
- 電商代運(yùn)營相關(guān)行業(yè)投資方案范本
- 高效能復(fù)合外墻外保溫材料相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 腹部的斷面解剖學(xué)課件
- 現(xiàn)代生產(chǎn)運(yùn)營管理
- 兒童保健和疾病防治原則課件
- 【初中地理】海陸變遷教學(xué)課件-2024-2025學(xué)年七年級(jí)地理上學(xué)期(湘教版2024)
- 高中教育課題申報(bào)書:高中歷史教學(xué)中學(xué)生歷史學(xué)科核心素養(yǎng)的培養(yǎng)
- 浙教版勞動(dòng)教育六年級(jí)上冊(cè)項(xiàng)目三 任務(wù)一《班級(jí)生活共觀察》教學(xué)課件
- zippo稀有品系列圖鑒
- 個(gè)體工商戶名稱(字號(hào))預(yù)先核準(zhǔn)登記申請(qǐng)書
- 第六章 人工智能及其應(yīng)用 教學(xué)課件 2023-2024學(xué)年粵教版(2019)高中信息技術(shù)必修1
- 實(shí)習(xí)單位鑒定表(模板)
- 生涯決策平衡單
- 六年級(jí)上冊(cè)道德與法治知識(shí)點(diǎn)重點(diǎn)歸納總結(jié)
- 2022終末期肝病的營養(yǎng)支持(全文)
- 梁山伯與祝英臺(tái)的故事
- 法院院長接待日制度實(shí)施細(xì)則
評(píng)論
0/150
提交評(píng)論