• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      安卓系統(tǒng)通話(huà)狀態(tài)的分析與實(shí)現(xiàn)

      2016-10-13 10:42:34陳希文
      電子設(shè)計(jì)工程 2016年10期
      關(guān)鍵詞:源代碼監(jiān)聽(tīng)安卓

      陳希文

      (武漢郵電科學(xué)研究院湖北武漢430074)

      安卓系統(tǒng)通話(huà)狀態(tài)的分析與實(shí)現(xiàn)

      陳希文

      (武漢郵電科學(xué)研究院湖北武漢430074)

      Android為當(dāng)前流行的移動(dòng)終端操作系統(tǒng)。通話(huà)功能是Android系統(tǒng)不可或缺的一部分,系統(tǒng)本身提供的功能有限,利用Android系統(tǒng)的開(kāi)源性,我們可以通過(guò)修改通話(huà)功能源代碼實(shí)現(xiàn)一些系統(tǒng)本身所沒(méi)有的功能,滿(mǎn)足不同的需求。文中分析Android系統(tǒng)通話(huà)流程,通過(guò)對(duì)系統(tǒng)源代碼的修改,完成對(duì)不同通話(huà)狀態(tài)的監(jiān)聽(tīng)。

      安卓系統(tǒng);通話(huà)狀態(tài);源代碼;編譯

      Android以其開(kāi)源、高度可移植性、功能全面等優(yōu)勢(shì)成為當(dāng)下最為流行的移動(dòng)終端操作系統(tǒng)[1]。雖然作為一個(gè)操作系統(tǒng)不可能同時(shí)滿(mǎn)足我們所有應(yīng)用的需求,在一些特定場(chǎng)合,需要使用到一些Android系統(tǒng)本身沒(méi)有的功能,我們就可以利用Android的開(kāi)源性對(duì)系統(tǒng)源碼進(jìn)行定制修改,編譯生成rom包,讓移動(dòng)終端使用定制的系統(tǒng),來(lái)滿(mǎn)足我們的需求。

      1 Androld系統(tǒng)簡(jiǎn)介

      安卓系統(tǒng)采用分層結(jié)構(gòu),起系統(tǒng)架構(gòu)如圖1所示。

      圖1 Android的系統(tǒng)架構(gòu)

      最上層的App1ication層為應(yīng)用層,是系統(tǒng)與用戶(hù)交互的部分,利用系統(tǒng)提供的功能在這一層實(shí)現(xiàn)各種應(yīng)用,滿(mǎn)足我們的需求;

      下面的Framework層,是Android系統(tǒng)提供給應(yīng)用開(kāi)發(fā)者的一個(gè)框架,應(yīng)用的開(kāi)發(fā)就是在這個(gè)框架上進(jìn)行擴(kuò)展,通過(guò)對(duì)各種API與組件的調(diào)用來(lái)實(shí)現(xiàn)不同的功能;

      接著是Android系統(tǒng)運(yùn)行庫(kù)層,當(dāng)使用Android應(yīng)用框架時(shí),Android系統(tǒng)會(huì)通過(guò)一些C/C++庫(kù)來(lái)支持我們使用的各個(gè)組件[2],使其能更好地為我們服務(wù);

      最底層的是Linux內(nèi)核層,Android的核心系統(tǒng)服務(wù)基于Linux2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等都依賴(lài)于此內(nèi)核,實(shí)現(xiàn)我們與底層硬件之間的交互,Linux內(nèi)核同時(shí)也作為硬件抽象層隱藏具體硬件細(xì)節(jié)為上層提供統(tǒng)一的服務(wù)。

      2 通話(huà)系統(tǒng)

      手機(jī)作為移動(dòng)終端最大的組成部分已經(jīng)成為我們生活中不可或缺的一部分了,盡管現(xiàn)在我們的智能手機(jī)終端有著越來(lái)越豐富的功能與內(nèi)容,但是語(yǔ)音通話(huà)作為其最重要的組成部分之一,在未來(lái)很長(zhǎng)一段時(shí)間內(nèi)都是及其重要,也是不可或缺的。通話(huà)功能最終是由Modem來(lái)實(shí)現(xiàn)的,但是對(duì)Modem的操作都是由操作系統(tǒng)來(lái)完成的,Android系統(tǒng)的通話(huà)實(shí)現(xiàn)大體分為App層,Java框架層,RILD層3個(gè)部分[3],結(jié)構(gòu)如圖2所示。

      圖2 Android通話(huà)系統(tǒng)結(jié)構(gòu)

      其中App層相關(guān)應(yīng)用屬于A(yíng)ndroid的應(yīng)用程序,它負(fù)責(zé)處理系統(tǒng)與使用者的交互過(guò)程,管理我們都輸入,通話(huà)記錄聯(lián)系人信息等等,同時(shí)它還負(fù)責(zé)將我們輸入的指令下發(fā)給框架層以供進(jìn)一步處理,同時(shí)將下方發(fā)送過(guò)來(lái)的信號(hào)轉(zhuǎn)化為可見(jiàn)的信息反應(yīng)給使用者。其中系統(tǒng)級(jí)應(yīng)用phoneApp是開(kāi)機(jī)啟動(dòng)的,它將常駐內(nèi)存中,與其相關(guān)的各service注冊(cè)事件會(huì)一直處于監(jiān)控運(yùn)行狀態(tài),以及時(shí)處理各種相關(guān)事件,并在UI上更新。

      在java框架層,通話(huà)系統(tǒng)的各功能通過(guò)GsmPhone來(lái)實(shí)現(xiàn),一方面,它接受上層的各種請(qǐng)求,并將這些請(qǐng)求經(jīng)RIL_J通過(guò)socket傳遞給ri1d守護(hù)進(jìn)程;同時(shí),它也通過(guò)其它的處理模塊監(jiān)聽(tīng)處理RIL_Java獲取的事件,并將其更新到相關(guān)的上層模塊中。其中框架層里的RIL_Java在本質(zhì)上就是一個(gè)RIL代理,起轉(zhuǎn)發(fā)作用,是Android系統(tǒng)在Java概念空間中的電話(huà)系統(tǒng)的起點(diǎn)。RIL_Java通過(guò)連接RILD建立的偵聽(tīng)套接口,來(lái)發(fā)起請(qǐng)求,并等待應(yīng)答,同時(shí)將結(jié)構(gòu)發(fā)送到目標(biāo)處理對(duì)象[4]。

      所有的通話(huà)動(dòng)作最終都要由Modem來(lái)實(shí)現(xiàn),不同的Modem,各種指令格式等都可能不一樣,對(duì)底層Modem的操作主要由RIL來(lái)完成。RIL層分為兩個(gè)部分:RILD管理框架,AT相關(guān)的xxxri1.so動(dòng)態(tài)鏈接庫(kù)。系統(tǒng)對(duì)Modem的操作通常通過(guò)AT命令來(lái)進(jìn)行,RILD管理框架部分是具體的AT指令應(yīng)答解析者。從最基本的功能來(lái)講,ri1建立了一個(gè)偵聽(tīng)Socket,等待客戶(hù)端的連接,然后從該連接上讀取RIL_Java成傳遞來(lái)的命令并轉(zhuǎn)化成AT指令發(fā)送到Modem。并等待Modem的回應(yīng),然后將結(jié)果通過(guò)套接口傳回到Ri1_Java層。AT相關(guān)的xxxri1.so動(dòng)態(tài)鏈接庫(kù)則是AT指令合成者,它由不同的廠(chǎng)商為自己所使用的不同Modem所配置的AT命令的集合,這種結(jié)構(gòu)的好處就是分離了管理AT指令的操作和具體不同Modem所需命令格式的差異。

      3 通話(huà)系統(tǒng)定制修改

      3.1定制需求

      通話(huà)功能中有一個(gè)很重要的部分就是對(duì)于不同通話(huà)狀態(tài)的監(jiān)管和處理,對(duì)一般android系統(tǒng),我們可通過(guò)Te1ephonyManager為我們提供的PhoneStateListener()監(jiān)聽(tīng)來(lái)監(jiān)聽(tīng)不同的通話(huà)狀態(tài)來(lái)進(jìn)行相應(yīng)的處理,然而系統(tǒng)出于安全等因素的考慮只為我們提供了

      Te1ephonyManager.CALL_STATE_IDLE(空閑)j

      Te1ephonyManager.CALL_STATE_RINGING(來(lái)電響鈴)j

      Te1ephonyManager.CALL_STATE_OFFHOOK(摘機(jī))j3種狀態(tài),而系統(tǒng)的ca11類(lèi)有IDLE,ACTIVE,HOLDING,DIALING,ALERTING,INCOMING,WAITING,DISCONNECTED,DISCONNECTING九種狀態(tài)[5],當(dāng)我們需要監(jiān)聽(tīng)系統(tǒng)提供的3種狀態(tài)以為的其他狀態(tài)時(shí),如我們需要監(jiān)聽(tīng)撥打電話(huà),對(duì)方響鈴的狀態(tài)(即ALERTING狀態(tài)),并進(jìn)行相關(guān)處理時(shí),我們需要對(duì)系統(tǒng)進(jìn)行定制修改,通過(guò)修改系統(tǒng)的代碼,然后編譯生成新的rom包,為終端刷入我們定制的系統(tǒng)來(lái)使用。

      3.2通話(huà)狀態(tài)分析與源碼修改

      通話(huà)功能最終是由Modem來(lái)實(shí)現(xiàn)的,所以不同的通話(huà)狀態(tài)及其改變過(guò)程都是來(lái)自于Modem的,Modem會(huì)將這些信息通過(guò)串口方式返回給RILC,再由RILC返回給RILJ。

      作為通話(huà)系統(tǒng)框架層中最重要的一個(gè)類(lèi)GsmCa11Tracker(位置為frameworksopt e1ephonysrcjavacomandroidinterna1 e1ephonygsmGsmCa11Tracker.java)是Android系統(tǒng)的通話(huà)管理部分,它在本質(zhì)上其實(shí)是一個(gè)Hand1er,它通過(guò)建立一個(gè)列表來(lái)對(duì)現(xiàn)行的所有通話(huà)進(jìn)行管理,GsmCa11Tracker在構(gòu)造時(shí)就將自己登記到了電話(huà)狀態(tài)變化通知表中。RIL_Java一收到電話(huà)狀態(tài)變化的通知,就會(huì)使用VENT_CALL_ESTATE_CHANGE通知到GSMCa11Tacker,并向上層提供電話(huà)調(diào)用接口,GSMCa11-Tacker把在電話(huà)狀態(tài)變化通知表里所有通話(huà)分為3類(lèi):

      RingingCa11:INCOMING,WAITING(未接通的來(lái)電)

      ForegourndCa11:ACTIVE,DIALING,ALERTING(接通的通話(huà))

      BackgroundCa11:HOLDING(保持狀態(tài)的通話(huà))

      上層函數(shù)通過(guò)getRingCa11(),getForegrouandCa11()等來(lái)獲得電話(huà)系統(tǒng)中特定通話(huà)連接。

      GsmCa11Tracker在收到狀態(tài)變化的信息之后會(huì)首先對(duì)狀態(tài)進(jìn)行歸類(lèi),然后通過(guò)updatePhoneState()方法來(lái)更新phone狀態(tài)的變化,我們?cè)?/p>

      內(nèi)只有3個(gè)狀態(tài),所以我們需要在pub1ic static fina1 int CALL_STATE_OFFHOOK=2j之后添加pub1ic static fina1 int CALL_STATE_ALERTING=3j即可。

      3.3定制系統(tǒng)的使用

      通過(guò)以上對(duì)通話(huà)狀態(tài)的分析與源代碼的修改,我們實(shí)現(xiàn)了外部應(yīng)用通過(guò)Te1ephonyManager來(lái)獲取ALERTING狀態(tài),修改過(guò)后的源代碼需要經(jīng)過(guò)編譯以生成我們可以使用的rom包。安卓系統(tǒng)的編譯需要在Linux環(huán)境下完成,完成環(huán)境配置之后進(jìn)入我們系統(tǒng)代碼所在目錄使用以下命令進(jìn)行編譯:

      source bui1d/envsetup.sh

      (用來(lái)將envsetup.sh里的所有用到的命令加載到環(huán)境變量里去)

      1unch cm_bacon_userdebug

      (用來(lái)選擇編譯的產(chǎn)品與類(lèi)型)make bacon-j4

      (開(kāi)始編譯,其中_j4中的4代表你CPU的線(xiàn)程數(shù),試編譯所使用機(jī)器的性能自行選擇,這里我們選擇4就是開(kāi)啟4個(gè)線(xiàn)程一起編譯)

      編譯完成后,會(huì)在out/target/product目錄下生成rom包統(tǒng)[6],最后使用刷機(jī)工具如刷機(jī)精靈將編譯好的rom包刷入移動(dòng)終端就可以了,在我們的定制系統(tǒng)內(nèi)我們可以使用PhoneStateListener()來(lái)對(duì)去電接通瞬間的狀態(tài)進(jìn)行監(jiān)聽(tīng)了,在pub1ic void onCa11StateChanged(int state,String incomingNumber)內(nèi),當(dāng)state為3時(shí)即系統(tǒng)處于A(yíng)LERTING狀態(tài)。

      4 結(jié)束語(yǔ)

      本文介紹了Android操作系統(tǒng)內(nèi)通話(huà)系統(tǒng)的大致結(jié)構(gòu),重點(diǎn)闡述通話(huà)狀態(tài)的變化在系統(tǒng)中的上報(bào)流程。在一些特定的需求下,我們通過(guò)一般手段無(wú)法實(shí)現(xiàn)的功能,如對(duì)更多通話(huà)狀態(tài)進(jìn)行監(jiān)聽(tīng)的時(shí)候,我們可以采取對(duì)系統(tǒng)源代碼進(jìn)行定制修改,并編譯生成新的rom包,通過(guò)刷機(jī)的方法為移動(dòng)終端寫(xiě)入我們自己定制的操作系統(tǒng)來(lái)使用。

      [1]Sy1vain Rataboui1.Android NDK Beginner's Guide[M].Packt Pub1ishing,2012.

      [2]王家林,王家俊,王家虎.Android高級(jí)開(kāi)發(fā)實(shí)戰(zhàn):UI、NDK與安全[M].北京:電子工業(yè)出版社,2013.

      [3]吳延昌,馮萍,蘇聰.基于J2ME技術(shù)的應(yīng)用開(kāi)發(fā)與研究[J].微電子與計(jì)算機(jī),2005,22(9):126_131.

      [4]Gartner.wor1dwide smartphone sa1es in Q3 2013[EB/0L].[2014_ 01_08].http://www.gartner.com/newsroom,Id/2623415.

      [5]Na'ona1 Vu1nerabi1ity Database,Vu1nerabmty summary for CVE_2012—0056[EB/OL].[2013—12一09].http://web.nvd. nist.gov,view7vu1n/detai1?vu1nId—cVE_201z—0056&cid_2.

      [6]Symp Inc,2008:125—133Shi Y,Casey K,Ert1 M A,et a1. Virtua1 machine showdown:Stack ver$t1s registem[J].ACM Tram.Archit.Code Optim,2008,4(4):1_36.

      Analysls and lmPlementatlon of androld communlcatlon state

      CHEN Xi_wen
      (Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China)

      Android is the popu1ar mobi1e operating system.Phone function is an integra1 part of the system,the system itse1f provides 1imited functiona1ity,the use of open_source Android system,we can achieve some of the system itse1f does not have the function ca11s by modifying the source code,to meet different needs.This paper ana1yzes the Android system ca11 f1ow through the system source code modifications,comp1etion of the different ca11 state monitoring.

      android;intercom state;source code;compi1e

      TN916.7

      A

      1674_6236(2016)10_0150_03

      2015_06_11稿件編號(hào):201506126

      陳希文(1989—),男,河南信陽(yáng)人,碩士研究生。研究方向:信號(hào)與信息系統(tǒng)。

      猜你喜歡
      源代碼監(jiān)聽(tīng)安卓
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      基于TXL的源代碼插樁技術(shù)研究
      千元監(jiān)聽(tīng)風(fēng)格Hi-Fi箱新選擇 Summer audio A-401
      文物表情包
      軟件源代碼非公知性司法鑒定方法探析
      網(wǎng)絡(luò)監(jiān)聽(tīng)的防范措施
      電子制作(2017年20期)2017-04-26 06:58:02
      一種基于安卓系統(tǒng)的手機(jī)側(cè)抓包分析方法
      揭秘龍湖產(chǎn)品“源代碼”
      應(yīng)召反潛時(shí)無(wú)人機(jī)監(jiān)聽(tīng)航路的規(guī)劃
      安卓L未至安卓M來(lái)了!安卓首泄漏M系統(tǒng)
      平罗县| 巴中市| 安远县| 万盛区| 仙居县| 白银市| 万安县| 扎赉特旗| 津南区| 罗山县| 霍州市| 淅川县| 永州市| 闵行区| 稻城县| 邢台县| 凤冈县| 齐河县| 清苑县| 淅川县| 静乐县| 荆州市| 昭通市| 浦东新区| 德格县| 辽阳市| 龙南县| 资溪县| 高青县| 万载县| 纳雍县| 江津市| 广州市| 康平县| 莆田市| 怀柔区| 平利县| 大竹县| 彭州市| 和龙市| 东乡县|