問題驅(qū)動模式下的Android學習總結(jié) part 01 時間:2019-05-12 03:56:47 收藏本文下載本文作者:會員上傳 簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《問題驅(qū)動模式下的Android學習總結(jié) part 01》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《問題驅(qū)動模式下的Android學習總結(jié) part 01》。 第一篇:問題驅(qū)動模式下的Android學習總結(jié) part 01 CryStal: 1 自己在看Mars-chen的Android視頻 感覺不錯 自己也總結(jié)了點學習筆記 是以視頻順序總結(jié)的簡單知識點總結(jié) 感覺如果可以做出下面幾個小任務那么視頻中的知識點也就沒有問題了 比較喜歡這種任務問題驅(qū)動式的學習模式: 目錄: 001 Android系統(tǒng)的體系結(jié)構(gòu):.......................................................................2 002 Android和iPhone對比.........................................................................3 003 Android的四個非常重要的組件...............................................................3 004 Android的開發(fā)環(huán)境................................................................................4 005 Android賺錢方式....................................................................................4 006 Android開發(fā)環(huán)境的搭建.........................................................................4 007 開發(fā)一個最簡單的Android實例程序.......................................................5 008 Android項目的目錄結(jié)構(gòu).........................................................................5 009 Activity的主要作用/簡述Activity...................................................6 010 設計一個簡單的Activity.......................................................................6 011 Layout配置文件的幾個簡單的標簽和其配置............................................6 012 將Activity和布局文件關(guān)聯(lián)并簡單在程序中修改空間............................7 013 簡述Intent.............................................................................................8 014 為Button添加一個監(jiān)聽器實現(xiàn)點擊按鈕時激發(fā)短信發(fā)送程序...................9 015 TextView / EditText / Button / Intent / Menu 使用方法...10CryStal: 2 001 Android系統(tǒng)的體系結(jié)構(gòu):Android底層是一個Linux內(nèi)核 有很多的驅(qū)動程序 提供一操作系統(tǒng)的最核心最基礎的功能Linux之上是一些程序包 一般是C和C++編寫的 比如OpengGL(做圖形)SQLite(基于文本的數(shù)據(jù)庫)以及一個Java虛擬機(是谷歌開發(fā)的手機版)之上是應用程序框架(Application Framework)Java 編寫提供了開發(fā)程序的最基本的框架最上面的是Applications 這個就是我們要寫的CryStal: 3002 Android和iPhone對比開發(fā)環(huán)境上 整個系統(tǒng)的基礎上 開發(fā)語言 開發(fā)許可證開發(fā)出的程序的下載方式 對flash的支持 手機生產(chǎn)廠商 ……003 Android的四個非常重要的組件Activity: 負責處理外觀 是應用程序的界面Intent: 負責應用程序之間傳輸數(shù)據(jù)的Service: 承擔數(shù)據(jù)處理工作 在后臺運行 是不可見的 Content Provider : 為應用程序提供數(shù)據(jù) 是一組接口CryStal: 4004 Android的開發(fā)環(huán)境Android SDK Eclipse Eclipse plugin for android:ADT005 Android賺錢方式出售程序(與google分成)添加廣告(主流的賺錢方式)006 Android開發(fā)環(huán)境的搭建Android SDK的安裝http://developer.android.com/index.html 需要使用翻墻軟件 在SDK目錄下選擇相應的版本就可以了下載的SDK其實只是SDK的安裝工具而已 運行后可以選擇下載對應的下載信息SDK亦可以直接拷貝使用(建議將各個版本的SDK都下載下來 android7 就是2.1 android8 就是2.2)將tools中有很多可執(zhí)行文件 將其目錄添加到path中ADT的安裝和配置ADT 是 Eclipse插件 所以有Eclipse和jdk Jdk建議jdk 6.0 比較快 Eclipse推薦3.5以上ADT插件可以在Eclipse->help->Install new plugin->從網(wǎng)路上下載 路徑官網(wǎng)上有介紹 https//dl-ssl.google.com/android/eclipse也可以找到壓縮包解壓后直接拷貝到Eclipse目錄下的plugin下 在Window-> Preferences-> android-> sdk的安裝路徑Android模擬器的配置在Android SDK and AVD Manager 里面添加new 而后啟動CryStal: 5007 開發(fā)一個最簡單的Android實例程序New Android Project 配置Build Target(版本兼容問題)Application name : 應用程序的名字 Package name: 每一個應用程序有一個包名 存入手機的時候是的目錄結(jié)構(gòu)有關(guān) Create Activity: 開發(fā)工具輔助創(chuàng)建 Min SDK Version : 4 最低SDK版本008 Android項目的目錄結(jié)構(gòu)Src: 源文件Gen:開發(fā)工具自動生成的 R.java 很重要 用于資源的查找 Android.jar android開發(fā)環(huán)境的Jar包 Assets:放置文件 任何的Res放置文件 有子目錄結(jié)構(gòu) 而且所有文件都會在R.java中生成id 可以在程序中查找Drawable-hdpi 放圖片 高分辨率Drawable-ldpi 放圖片 低分辨率Drawable-mdpi 放圖片 中分辨率字程序會自動選擇使用何種分辨率Layout: 布局文件 用于負責Activity的布局.xml格式 不可以使用大寫名 Values: 包含著一些基礎的文本信息的存儲 有利于程序的國際化 AndroidManifest.xml Android程序的總的配置文件 如圖 用于設置初始化CryStal: 6 009 Activity的主要作用/簡述Activity Activity是負責Android中的顯示效果 Activity是由很多控件組成 它是一種很重要的用戶接口 由于手機的屏幕和硬件特性 合理恰當?shù)脑O計Activity顯得尤為重要010 設計一個簡單的Activity 1 一個Activity就是一個類 并且要繼承android.app.Activity 2 重寫void onCreate(Bundle saveInstaceState);Activity被首次調(diào)用的時候 系統(tǒng)就會調(diào)用這個Activity的onCreate()方法 3 在manifest中注冊Activity Activity要在Application標簽下 比較重要的信息是 Activity的名字(類名)標簽 個別的Activity還需要配置為程序的入口Activity 4 為Activity添加布局文件 里面包含很多控件 并在onCreate()中將這個Activity與這個布局文件關(guān)聯(lián)011 Layout配置文件的幾個簡單的標簽和其配置Android:orientation 組織結(jié)構(gòu) 垂直/水平vertical/Honer…Android:layout_width 寬度 安內(nèi)容擴展 填充父控件Android:layout_height 高度 圖示:Android:id 可以通過程序查詢到這個組建 eg:”+id/XXX”Android:text 可以調(diào)用strings.xml中的內(nèi)容 eg:@string/XXX 按鈕 … …CryStal: 7 012 將Activity和布局文件關(guān)聯(lián)并簡單在程序中修改空間Public void onCreate(Bundle saveInstanceState){ Super.onCreate(saveInstanceState);//Activity與布局文件的關(guān)聯(lián)setContentView(R.layout.main);TextView myTextView =(TextView)findViewById(R.id.XXX);myTextView.setText(“我對我自己的空間設置的新值”);} 圖示:CryStal: 8 013 簡述Intent Intent用于Android程序中的數(shù)據(jù)傳遞 可以實現(xiàn)Activity之間的傳遞 傳遞方式如下Intent(意圖)詳細敘述: Intent負責Android的數(shù)據(jù)傳輸 有點想web中的請求 傳輸?shù)男畔?Intent的作用不僅僅在Activity之間 還有很多 Component name : 決定Intent啟動那些組建Action : 決定Intent啟動了新的組建后 這個組建需要做哪些行為 Date : URI….不是很懂Extras : 額外的 鍵值對 用于存儲簡單的傳輸數(shù)據(jù) Flags 使用較少 Category 使用較少CryStal: 9014 為Button添加一個監(jiān)聽器實現(xiàn)點擊按鈕時激發(fā)短信發(fā)送程序//聲明一個Button Private Button myButton = null;//獲取到這個Button myButton =(Button)findViewById(R.id.myButton);//為Button添加監(jiān)聽器myButton.setOnClickListener(new MyButtonListener());//設計監(jiān)聽器內(nèi)部類: Class MyButtonListener implements onClickListener{ Public void onClick(View v){ //點擊按鈕后的內(nèi)容:生成一個Intent對象: Intent intent = new Intent();intent.putExtra(“鍵”,”值”);//都是字符串 取得的方法是:getIntent.getStringExtra(“鍵”)是在另一個Activity中//同過當前的Activity到OtherClass的Activity} }014-圖示:Intent.setClass(MyClass.this,OtherClass.class);//發(fā)送Intent意圖MyClass.this.startActivity(intent);CryStal: 10 015 TextView / EditText / Button / Intent / Menu 使用方法 開發(fā)一個Activity(兩個,一個是初始化 一個是跳轉(zhuǎn))2 在manifest中配置 在layout中添加布局文件 包括各個細節(jié)信息和文本值 4 在Activity中與配置文件關(guān)聯(lián) 添加Button監(jiān)聽器 并在監(jiān)聽器中添加跳轉(zhuǎn)事件 6 在跳轉(zhuǎn)后的Activity中處理putExtra信息 并顯示 為整個程序添加一個menu并實現(xiàn)點擊退出選項后 關(guān)閉當前Activity 退出系統(tǒng) 1-6 之前有所講述 不詳寫了 7: menu的添加和事件的添加@Overridepublic boolean onCreateOptionsMenu(Menu menu){} @Overridepublic boolean onOptionsItemSelected(MenuItem item){ 為了確保menu的操作有效不要將menuitem的id設置成相同的值??!? 待考證 If(item.getItemId == 1){ } } return super.onOptionsItemSelected(item);finish();// 好像是不是退出程序只是結(jié)束當前的Activity 待考證menu.add(0, 2,2, “第0組 第二項”);//(組的id 當前菜單項的id ,排序, 顯示的內(nèi)容)menu.add(1, 1, 2, “第1組 第二項”);menu.add(1, 2, 1, “第1組 第一項”);menu.add(0, 1, 1, “第0組 第一項”);menu.add(1, 3, 3, “第1組 第三項”);menu.add(1, 4, 4, “第1組 第四項”);menu.add(1, 5, 5, “第1組 第五項”);return super.onCreateOptionsMenu(menu);//當排序相同時 會按源代碼編寫順序加載//做完這些基本上這幾個空間的簡單使用也就會了第一部分結(jié)束感謝mars-chen的視頻 , 此部分文檔對應該視頻第一部分1-6節(jié),個人能力有限,文檔內(nèi)容絕對準確性本人無法保證,僅供參考,希望可以對其他Android愛好者有所幫助第二篇:Android學習總結(jié)Android學習總結(jié)零零碎碎的總結(jié):1.客戶端的功能邏輯不難,UI界面也不難,但寫UI花的時間是寫功能邏輯的兩倍.2.寫代碼前的思考過程非常重要,即使在簡單的功能,也需要在本子上把該功能的運行過程寫出來.3.要有自己的知識庫,可以是一個工具類,把寫過的,看過的好的代碼放進去,也可以是一個筆記本軟件.因為只有放在知識庫里的東西,才是你最重要的財富.4.如果你想做自由職業(yè)者,你需要學英語,因為在國外的盈利比國內(nèi)多很多.如果你想進大公司,好公司,你需要學英語.你想深入學習android,但中文的android文章太少了,你查查百度,到處都是copy來copy去的hellword,所以,你需要學英語.如果你想出國,你需要學英語.5.Http協(xié)議要研究透徹.http的信息頭有什么信息,分別代表什么,信息體有什么信息,代表什么,都要搞的明明白白.scoket也是一樣.6.在eclipse里的layout文件都有g(shù)raphical Layout.通過這個好好的把UI調(diào)整好.7.Android里的junit每次運行都會打包新的apk到設備上跑.效率非常慢.如果是跟android無關(guān)的測試,最好自己建立一個單純的java項目做測試.8.面試的時候不要覺得自己提的薪水太高,物以稀為貴明白嗎?不管你的期望薪資多少,都有可能實現(xiàn),這只是時間問題.9.如果一家小公司通過獵頭找到你,即使公司在小,也比外面那些40,50人的公司還要好.不要覺得公司不行,擔心會倒閉.放心吧,至少活1年是沒問題的.10.不要把自己綁在android上,有空也研究下IOS(最近小弟就準備研究ios,剛買了6本書...).11.移動互聯(lián)網(wǎng)最少還有10年的快速增長.android最少還有兩年的快速增長.走android這條路是不會錯的.12.有空多學點開放平臺的SDK.比如新浪微博,騰訊微博,淘寶平臺,支付寶移動支付平臺,快錢移動支付平臺等等..這些都是不愁沒市場的.13.即使技術(shù)再差,也要發(fā)布一個應用到market上去.因為這樣你才了解做一個應用的邏輯.14.每個月拿到薪水省500-1000元出來.這些錢投在買學習資料,去培訓班上課...在培訓班,花再多的錢也是值得的.15.你真正的價值在項目經(jīng)驗和對底層的認識上.不要忽略基礎知識.16.如果有空把Android的源代碼看一下.底層的東西很枯燥,但這些很值得學.17..程序員其實是藝術(shù)家.代碼重構(gòu)和設計模式,是非常非常重要的東西,必須要學18.不要去維護一個項目,要去做一個項目.19.一開始不要輕易去大公司,雖然大公司是可以讓你呆一輩子的.但你的起點低,以后成就也低.20:每天早上提前20分鐘上班,5分鐘把今天的工作計劃寫好.15分鐘用來看各大It論壇的新聞.21:如果以前沒做過java,那就把SSH看下,自己搭建一個小服務器.這是為了接私活用.22:PS一定要學,接私活用.23:多下載市面上好的應用,每天都用,只有這樣你才能了解市場.現(xiàn)在所有的APK都可以反編譯,看源代碼麻煩,但看layout和圖片很容易,所以....你懂的.24.要有羞恥心.25.老板僅僅要求你把東西做完,需求完成.但你必須對自己要更嚴格一點.寫一段代碼,從網(wǎng)上復制一份代碼,并不是可以用就行了,你還必須明白他的原理,為什么這樣就可以?這才是對你最有用的地方,這也是你今后薪資增長的保證.26.要懂得舍得.移動領域發(fā)展太快,必要時必須要用錢換時間.不然你會遠遠落后別人(我之前花了4000大洋去培訓班學IOS三天).27.要明白自己想要什么,什么才能最大性價比提高你的能力.對我來說,能讓我提高最大的,就是Android和IOS同時會,并且自己可以做架構(gòu)設計.28.看android技術(shù)書籍最快的學習方法,先通讀一次.然后把書本上的demo一個一個寫出來.不要覺得太容易不去寫.很多東西都是這樣,看起來簡單,但做起來難.最后再對照自己寫出來的程序代碼去理解書本的意思.29.應用和游戲是2個方向,沒有一個公司會同時做游戲又做應用,即使是外包公司,大多也只做一塊.專精一個就可以了.30.每次做完一個項目,要強迫自己做總結(jié),通過這個項目,我學到了什么新技術(shù)?犯了哪些SB錯誤?31.一家小公司,如果有正式財務部,那肯定是正規(guī)的,不要擔心欠薪問題.如果沒有,就說不準了.bbs.12580life.com第三篇:Android學習總結(jié) 20110325專題Android學習總結(jié)在這段時間主要對Android平臺有了一定的了解,對一些簡單的設計也有了一定的掌握Android概念Android是一個基于Linux核心的開放手持設備(主要是手機)平臺操作系統(tǒng),與Windows Moble、Symbian等手機操作系統(tǒng)處于同一級別。“Android大獎賽“首頁上列出的可能設計方向多媒體工具社交網(wǎng)絡新聞、資訊工具環(huán)保、慈善協(xié)作生產(chǎn)力工具Android Developer Challenge(ADC)游戲?qū)崟r資訊服務嶄新的用戶界面您想到的應用程序項目構(gòu)架src/:源代碼(sourse)目錄“src”目錄包含了“Android應用程序”各個程序源文件。對于上例 ”Bmi.java”是新 序項目中的主要程序塊。gen/:自動生成(Generate)目錄gen目錄中存放所有自動生成的文件。最關(guān)鍵就是R.java,這個文件是自動產(chǎn)生的,與”res”目錄下的XML文件內(nèi)容同步更新。Android<版本號>/:參考函數(shù)目錄此目錄的作用是將AndroidSDK里所有可呼叫的類、方法函數(shù),分門別類的列出,好方便開發(fā)者來參考。assert/:對此目錄目前還不是太懂 res/:資源(Resource)目錄res目錄存放所有程序中用到的資源文件。在里邊還有兩個經(jīng)常訪問的目錄,分別 “l(fā)ayout/:頁面布局(layout)目錄”和“values/:參數(shù)值(values)目錄”“AndroidManifest.xml”是Android應用程序的功能列表,每個應用程序都在這個文件中,列出該程序所提供的功能。我完成的BMI程序此程序是我參考書上的例子所完成的程序。BMI,英文全稱:Body Mass Index,中文名稱:身高體重指數(shù),是一個計算值,整個程序的思路是當我們在對應的文本框內(nèi)輸入身高(cm)、體重(kg),輸入完成后按下“計算BMI”鍵,屏幕上就會顯示計算結(jié)果,并彈出“你應該節(jié)食”、或“你應該多吃點”等健康建議的信息框。健康指標的計算方法是:身高(height)/(體重(weight)/100)只要BMI值超過25時就算偏胖、BMI值低于20就算偏瘦,介于這之間算正常。下面是我完成的程序界面:計算得到的BMI值是20.57,在20—25之間,體型正常。由于我對兩個文本框內(nèi)輸入的內(nèi)容進行了限制,因此只容許輸入數(shù)字BMI值為25.56,信息框彈出“你該節(jié)食了”在界面的下側(cè)有一個“健康小常識按鈕”,當點擊此按鈕時,會鏈接到一個有關(guān)健康生活小常識的網(wǎng)頁上:在每次點擊“計算BMI值”按鈕后首先會彈出一個消息框,消息框中包括兩個按 鈕,當點擊確認按鈕時消息框消失;當點擊首頁按鈕時會連接到相應的網(wǎng)頁下圖為點擊消息框確認按鈕后顯示的網(wǎng)頁:總結(jié)通過這段時間的學習,對于Android平臺的整個基本框架有了一定的了解,對程序整個運 及相互之間的調(diào)用流程也有了一定的掌握,但感覺自己java基本功比較薄弱,還得進一步學習。由于目前還沒有什么想法,我打算在后面的一段時間內(nèi)主要還是繼續(xù)掌握這方面知識,做一個類似于計算器之類的小軟件,以鞏固我這方面的知識。在查閱資料方面我還有點欠缺,尤其比較怕讀英文資料,這方面還得加強。第四篇:Android RIL&Call學習總結(jié)Android RIL與Call代碼學習總結(jié)前言本文分五部分:Android電信業(yè)務系統(tǒng)、RIL、Telephony APP Framework、Phone APP、Android通話簡單流程。1、Android電信業(yè)務系統(tǒng)主要敘述Android整個電信業(yè)務系統(tǒng)的軟件架構(gòu)。2、RIL主要敘述Android Radio Interface Layer相關(guān)要點,涉及的代碼主要放在hardwareril目錄下。3、Telephony APP Framework主要簡述電信業(yè)務系統(tǒng)Framework部分代碼相關(guān)要點,涉及的代碼主要放在frameworksbasetelephony目錄下。4、Phone APP主要敘述Android的電話業(yè)務模塊,涉及的代碼主要放在packagesappsPhone目錄下。5、Android通話簡單流程主要敘述從上層Phone APP發(fā)起電話的函數(shù)調(diào)用流程。一、Android電話業(yè)務系統(tǒng)簡單的說由三部分組成:Telephony Application(Java)+ Telephony Frameworks(Java)+ RIL(C/C++)二、RIL RIL(Radio Interface Layer),是Android電信業(yè)務系統(tǒng)和底層硬件之間的抽象層,Android提供該層方便用戶移植。手機每次請求相應的電信服務,如電話、短信、網(wǎng)絡連接等,都是通過AT指令與底層硬件進行交互的,拿電話來講,用戶請求撥打電話,需要向RIL發(fā)送相關(guān)的請求,接著RIL按照用戶的請求,調(diào)用相應的AT指令發(fā)送接口給底層發(fā)送AT指令,完成用戶撥打電話的流程。簡單的說,對RIL的移植,主要是針對不同的設備針對AT指令做相應的修改。1、RIL移植層的三個組成部分1)Vendor RIL 提供AT指令發(fā)送接口 2)RIL Daemon 加載RIL相關(guān)的庫同時初始化RIL,注冊RIL相關(guān)函數(shù)接口。同時,RILD也是上層和底層RIL的調(diào)用中轉(zhuǎn)站。3)RIL JNI Layer RIL JNI接口,提供上層Telephony APP Framework調(diào)用2、RIL的初始化流程加載ril.lib ? RIL_Init()? RIL_register(),詳細可見ridl.c中的main()函數(shù)。3、RIL接口的調(diào)用方式有兩種方式:主動請求(Solicited)和被動請求(Unsolicited)1)主動請求2)被動請求void(*OnUnsolicitedResponse)(int unsolResponse, const void *data,size_t datalen);4、涉及的主要源代碼文件1)reference-ril.c ? 本文件涉及的重要內(nèi)部函數(shù)及功能 requestRadioPower開啟通訊模塊 requestQueryNetworkSelectionMode 查詢網(wǎng)絡模式 requestGetCurrentCalls獲取當前通話 requestDial請求呼叫 requestWriteSmsToSim寫入短信至SIM卡 requestHangup掛斷電話 requestSignalStrength獲取信號強度 requestRegistrationState獲取卡注冊狀態(tài) requestOperator獲取運營商名稱 requestSendSMS請求發(fā)送短信 requestSetupDataCall撥號上網(wǎng) requestSMSAcknowledge短信回報requestEnterSimPin請求輸入SIM PIN碼 requestSendUSSD請求USSD業(yè)務 ? 本文件提供給ril.cpp調(diào)用的外部接口 RIL_InitRIL初始化 onRequestAT請求指令接口(異步方式)getVersion獲取RIL版本號,當前為“android reference-ril 1.0” onUnsolicitedAT請求指令接口(同步方式)2)ril.cpp 該文件主要提供ril.java調(diào)用接口,實現(xiàn)RIL的JNI調(diào)用方式、RIL Event管理機制 ? 實現(xiàn)了供上層調(diào)用的接口 typedef struct {int requestNumber;void(*dispatchFunction)(Parcel &p, struct RequestInfo *pRI);int(*responseFunction)(Parcel &p, void *response, size_t responselen);} CommandInfo;具體執(zhí)行的操作可以看頭文件ril_commands.h 舉一個例子:撥打電話,對應的requestNumber為RIL_REQUEST_DIAL,對應的dispatchFunction為dispatchDial,對應的responseFunction為responseFunction。? RIL Event管理與ril_event.cpp的Event接口配合實現(xiàn)RIL Event管理 RIL_startEventLoop rilEventAddWakeup eventLoop ril_event_init ril_event_set ril_event_add ril_event_del 4)rild.c rild的主要初始化工作都在main函數(shù)中進行。5、RIL JNI上層對外接口SetOnNITZTimegetIccCardStatussupplyIccPinsupplyIccPuksupplyIccPin2supplyIccPuk2changeIccPinchangeIccPin2getCurrentCallsgetPDPContextList dialgetIMSIgetIMEIgetIMEISVhangupConnectionacceptCallrejectCallgetLastCallFailCause getLastPdpFailCause getLastDataCallFailCause setMutegetMutegetSignalStrengthgetRegistrationState getGPRSRegistrationState getOperator設置網(wǎng)絡身份和時區(qū) 獲取SIM卡狀態(tài) 輸入PIN碼 輸入PUK碼 輸入PIN2碼 輸入PUK2碼 修改PIN碼 修改PIN2碼 獲取當前通話 獲取PDP列表 撥號獲取IMSI 獲取IMEI 獲取IMEISV 掛斷電話 接聽電話 電話拒接獲取Call失敗錯誤碼 獲取PDP失敗錯誤碼 獲取撥號連接失敗錯誤碼設置手機靜音模式(靜音/非靜音)獲取手機靜音模式(靜音/非靜音)獲取信號強度 獲取卡注冊狀態(tài) 獲取GPRS注冊狀態(tài) 獲取運營商 sendDtmfstartDtmf stopDtmf sendSMS deleteSmsOnSim writeSmsToSim發(fā)送DTMF Start DTMF Stop DTMF 發(fā)送短信刪除SIM卡短信 保存短信至SIM卡6、RIL機制RIL類有三個內(nèi)部類:RILRequest、RILSender、RILReceiver,這三個內(nèi)部類共同實現(xiàn)上層的電信業(yè)務操作請求。RILRequest,電信服務請求,上層應用通過該類與RIL JNI層進行消息的交互,同時RIL JNI層也通過該類與RIL底層進行消息的交互; RILSender,實現(xiàn)上層請求的命令發(fā)送 RILReceiver,負責接收底層的Response ? 以下是dial的RIL調(diào)用序列 ?上層調(diào)用dial ?設置Request請求并發(fā)送至RILSender消息處理隊列RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);…send(rr);? RILSender消息處理隊列消息隊列收到EVENT_SEND后往mSocket里邊填寫相應請求 ?RILD從mSocket中讀取相應的請求為RIL_REQUEST_DIAL,并設置相應的event ?執(zhí)行dispatchDial ? onRequest ? requestDial發(fā)送AT指令?底層給予responseVoid的響應?RILD向mSocket填寫相應的響應信息,并往RILReceiver消息隊列發(fā)送 ? processResponse ?processSolicited ?responseVoid(JNI)三、Telephony APP Framework概述電信業(yè)務Framework涉及Call、SMS、SIM卡、PDP等,代碼分為兩個部分,一個是SDK API,一個是平臺內(nèi)部類,不對外開放。這部分簡單的說,就是上層電信業(yè)務與底層RIL的中間層。1、Internal Class 1)ADN(Abbreviated Dialing Numbers,縮位撥號)相關(guān)的類 AdnRecord AdnRecordCache AdnRecordLoader 2)Call相關(guān)的類Call:基類,GsmCall和CdmaCall都由該基類擴展實現(xiàn) CdmaCal GsmCallCallTracker:基類,GsmCallTracker和CdmaCallTracker都由這個基類進行擴展實現(xiàn) GsmCallTracker: CdmaCallTracker PhoneBase:基類,CDMAPhone和GSMPhone都由這個基類擴展實現(xiàn) CDMAPhone GSMPhone Phone:電話操作的一些接口 CallerInfo CallerInfoAsyncQuery CallForwardInfo:呼叫轉(zhuǎn)移CallFailCause:GSM Call失敗錯誤碼 CallFailCause:CDMA Call失敗錯誤碼 3)數(shù)據(jù)連接相關(guān)類DataConnection:基類,GsmDataConnection和CdmaDataConnection都基于該類擴展實現(xiàn) GsmDataConnection CdmaDataConnection DataConnectionTracker:基類,CdmaDataConnectionTracker和GsmDataConnectionTracker都基于該類進行擴展實現(xiàn) CdmaDataConnectionTracker GsmDataConnectionTracker 4)SIM卡相關(guān)類IccCard:基類,RuimCard和SimCard都由該類進行擴展實現(xiàn) RuimCard SimCard IccRecords:基類,RuimRecords和SIMRecords都基于該類進行擴展實現(xiàn) RuimRecords SIMRecords IccProvider IccUtils 5)SMS相關(guān)類SMSDispatcher:實現(xiàn)發(fā)送短信SmsMessageBase:基類,SmsMessage由該類擴展實現(xiàn) SmsMessage:短信PDU包解析2、SDK API Class 實現(xiàn)SDK API接口,具體架構(gòu)見SDK API文檔四、Phone APP Android自帶一個Phone App,實現(xiàn)了GSM/CDMA的通話功能,這部分代碼放在packagesappsPhone目錄下。Phone APP開機就運行了,可以從AndroidManifest.xml設置的應用權(quán)限看出來。開機做如下初始化工作:A、初始化Telephony Framework B、Power、Ringer、Keyboard、狀態(tài)欄、SIM卡的注冊工作 C、CallNotifier、PhoneUtils初始化工作 具體可以參見onCreate Phone APP有如下幾個重要的類? PhoneApp requestWakeState:判斷手機是否可休眠 wakeUpScreen:喚醒手機PhoneAppBroadcastReceiver:內(nèi)部類,可以實時監(jiān)測手機的狀態(tài),飛行模式、藍牙耳機等。? PhoneUtils 電話基本組件接口,實現(xiàn)電話的一些基本操作,如Dial、Answer、Hangup、Hold等 placeCall:電話呼出 Hangup:掛斷電話 answerCall:接聽電話setMute/ setMuteInternal:靜音 turnOnSpeaker:免提showIncomingCallUi:顯示來電界面 ? InCallScreen 該類實現(xiàn)通話界面流程,主要如下:case R.id.menuAnswerAndHold,保持當前通話并接聽: internalAnswerCall ? PhoneUtils.answerCall(mPhone)case R.id.menuAnswerAndEnd,結(jié)束當前通話并接聽:internalAnswerAndEnd ? PhoneUtils.answerAndEndActive(mPhone)case R.id.menuAnswer,接聽:internalAnswerCall ? PhoneUtils.answerCall(mPhone)case R.id.menuIgnore,忽略:internalHangupRingingCall ? PhoneUtils.hangupRingingCall(mPhone)case R.id.menuSwapCalls,切換通話:internalSwapCalls ? PhoneUtils.switchHoldingAndActive(mPhone)case R.id.menuMergeCalls,合并通話: PhoneUtils.mergeCalls(mPhone)case R.id.menuManageConference,管理電話會議:setInCallScreenMode(InCallScreenMode.MANAGE_CONFERENCE)case R.id.menuShowDialpad,顯示撥號鍵盤: onShowHideDialpad ? mDialer.openDialer(true)case R.id.menuSpeaker,免提:onSpeakerClick ? PhoneUtils.turnOnSpeaker case R.id.menuBluetooth,藍牙: onBluetoothClick case R.id.menuMute,靜音:onMuteClick ? PhoneUtils.setMute case R.id.menuHold,通話保持: onHoldClick case R.id.menuAddCall,添加通話: PhoneUtils.startNewCall(mPhone)case R.id.menuEndCall,結(jié)束通話: internalHangup ? PhoneUtils.hangup(mPhone)? DTMFTwelveKeyDialer 該類實現(xiàn)DTMF processDtmf:發(fā)送DTMF clearDigits:清除DTMF鍵碼 startDtmfTone:播放DTMF Tone stopDtmfTone:停止播放DTMF Tone ? CallNotifier 繼承于Handler,用來實時監(jiān)測通話狀態(tài)并通知Phone Application,如PHONE_NEW_RINGING_CONNECTION(來電),PHONE_INCOMING_RING(來電響鈴),PHONE_DISCONNECT(通話掛斷),PHONE_BATTERY_LOW(電池電量低),具體相對應的處理可參見handleMessage ? CallFeaturesSetting 實現(xiàn)通話設置,此外該類包含一個內(nèi)部類VoiceMailProviderSettings用來實現(xiàn)語音信箱的設置? CallCard/ InCallTouchUi 這兩個類都是繼承于FrameLayout,Phone用來實現(xiàn)通話自身的布局需求。updatePhotoForCallState:更新替代圖片(如果通話號碼有設置特定代替圖片的)updateDisplayForConference:通話UI更新(用于電話會議)updateDisplayForPerson:通話UI更新getCallFailedString:獲取通話失敗錯誤字符串 displayOnHoldCallStatus:顯示通話保持UI displayMainCallStatus:更新通話UI updateState:更新通話狀態(tài)(供外部類調(diào)用)? BluetoothHandsfree/BluetoothHeadsetService 實現(xiàn)通話藍牙耳機功能,其實現(xiàn)核心是BluetoothHeadsetService,在PhoneApp 創(chuàng)建的時候會啟動它。BluetoothHeadsetService 通過接收底層藍牙服務的狀態(tài)消息來改變自身狀態(tài),同時它也會監(jiān)聽通話的狀態(tài)變化。onBluetoothEnabled:開啟藍牙設備 onBluetoothDisabled:關(guān)閉藍牙設備 connectHeadset:連接藍牙設備 audioOn:開啟audio audioOff:關(guān)閉audio redial:通過藍牙設備重播電話 updateBatteryState:更新電池強度 updateSignalState:更新信號強度五、Android通話簡單流程1、撥打流程(以電話本入口為例)?進入電話本,以某個聯(lián)系人發(fā)起呼叫,此時進入TwelveKeyDialer類的onClick函數(shù)case R.id.dialButton分支,啟動OutgoingCallBroadcaster Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//以新的TASK啟動 ?OutgoingCallBroadcaster發(fā)出Broadcast Announcement sendOrderedBroadcast(broadcastIntent, PERMISSION,new OutgoingCallReceiver(), null, Activity.RESULT_OK, number, null);?收到Broadcast后,進入OutgoingCallReceiver中的doReceive啟動InCallScreen ?進入internalResolveIntent mInCallInitialStatus = internalResolveIntent(getIntent());?placeCall ?PhoneUtils.placeCallVia/ PhoneUtils.placeCall ? Connection cn = phone.dial(number);Phone是Interface,所屬的dial接口是在PhoneBase的子類GSMPhone中實現(xiàn) ?進入GsmCallTracker類中的dial函數(shù) mCT.dial(newDialString);?調(diào)用CommandsInterface的dial接口cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());CommandsInterface的dial接口是在RIL.java中實現(xiàn)的 ?調(diào)用JNI接口dial ?……后續(xù)就是RIL JNI與libril的交互過程,見RIL機制2、來電流程?CallNotifier的消息處理隊列會收到PHONE_NEW_RINGING_CONNECTION ?onNewRingingConnection響鈴或震動(來電自動接聽也在里邊處理)?顯示來電界面InCallScreen PhoneUtils.showIncomingCallUi();3、來電處理? 接聽?internalAnswerCall?PhoneUtils.answerCall(mPhone)?關(guān)閉來電鈴聲等,進入接聽流程phone.acceptCall()?調(diào)用GsmCallTracker的acceptCall mCT.acceptCall();?調(diào)用CommandsInterface acceptCall 接口 cm.acceptCall(obtainCompleteMessage())?調(diào)用RIL JNI接口acceptCall向底層發(fā)送請求?……后續(xù)就是RIL JNI與libril的交互過程,見RIL機制 ? 掛斷? internalHangup ? PhoneUtils.hangup(mPhone)? 調(diào)用GsmCallTracker的handup ?調(diào)用CommandsInterface hangupConnection接口cm.hangupConnection(conn.getGSMIndex(), obtainCompleteMessage());?調(diào)用RIL JNI接口hangupConnection向底層發(fā)送掛斷請求 ?……后續(xù)就是RIL JNI與libril的交互過程,見RIL機制 ? 通話保持恢復PhoneUtils.switchHoldingAndActive(mPhone)? 添加一個新通話,實現(xiàn)多方通話 PhoneUtils.startNewCall(mPhone)Android_Phone源代碼來電流程解讀***************************CallNotifier***************************本類extends Handler并且implements CallerInfoAsyncQuery.OnQueryCompleteListener電話狀態(tài)改變之后本類會接到Message,然后本Handler通過Message的不同,進入不同的case:然后調(diào)用不同的方法處理各種狀態(tài)改變。同時實現(xiàn)了OnQueryCompleteListener接口,當來電的時候會幫助執(zhí)行查詢操作,比如查詢并調(diào)用Ringer設置響鈴方式。當來電時,本類會接受到一個PHONE_NEW_RINGING_CONNECTION(Message.what),然后調(diào)用對應的方法onNewRingingConnection(),該方法又會調(diào)用startIncomingCallQuery()方法,該方法就查詢用戶設置的鈴聲(可能是系統(tǒng)的,也可能是用戶自定義的),如果查詢完成則直接調(diào)用onQueryComplete().假如執(zhí)行超時的話,將會發(fā)送一個延時Message,延時后將默認調(diào)用系統(tǒng)的鈴聲。假如在延時發(fā)送Message過程中Query已經(jīng)完成,由于CallNotifier實現(xiàn)了OnQueryCopleteListener,就會自動調(diào)用onQueryComplete()方法,該方法將會首先把可能存在的延時Message給Remove,以防止再次設置鈴聲。接著調(diào)用onCustomRingQueryComplete()方法。然后該方法里面會調(diào)用Ringer的ring()方法啟動響鈴。********************************Ringer*************************** Ringer的ring()方法會啟動相應的響鈴方式。響鈴之后將會又Message發(fā)送,其內(nèi)容為PHONE_STATE_CHANGED*******************************InCallScreen**********************InCallScreen將會接受到發(fā)送的PHONE_STATE_CHANGED消息,然后調(diào)用onPhoneStateChanged()方法該方法將更新屏幕,CallNotifier的onCustomRingQueryComplete里也會通過PhoneUtils.showIncomingCallUi()來啟動InCallScreen屏幕。然后由InCallScreen處理,處理方式與前面打電話的大體一致,不過該類第一次調(diào)用時執(zhí)行了onCreate()方法,但是以后執(zhí)行都是從onNewIntent()開始.第五篇:Android的學習總結(jié)Android學習總結(jié)Android的學習總結(jié)現(xiàn)在對于Android的學習已有斗個學期了,但它對我來說其實還是一個大大的謎,還有待我去對它一一揭曉。在還沒有學習Android這門課之前,當聽到別人談到它時,知道它離我們很近,但是它給我的感覺卻是那么的神奇,一直就是在聽說著關(guān)于Android系統(tǒng)怎么怎么的新聞,知道它就在我的生活中,離我很近,我也在用它,但還是總有一種很遙不可及的感覺,覺得它不在我的思想里,所以呢,對于這門課《Android系統(tǒng)開發(fā)與實踐》的學習很是期待的。在上一個學期快要結(jié)束的時候,就聽到老師說了一下,說下一個學期我們可能會學習Android系統(tǒng)的開發(fā),他還說這個Android系統(tǒng)的開發(fā)很值得學習,很值得我們?nèi)ヌ剿?,說這個Android還一直在開發(fā)中,是一項很好玩的系統(tǒng),當時就很是興奮了,總是會在想Android系統(tǒng)到底是怎樣的,它是如何的深入我們的生活,又是如何的到我們所用的這些設備當中的,這一切都讓我感到很好奇。就這樣帶著一系列的問題走進了 這個學期,終于就要與它見面了,這門課也就在這樣的背景下,這樣的一種環(huán)境下走進了我的課堂,它給了我一種興奮感,對于它的出現(xiàn),我很是期待的,一開始老師就給我們講解了一些關(guān)于Android的知識,也給我們展示了Android系統(tǒng)開發(fā)的平臺,真的給了我一種奇妙的感覺,它不僅有編譯,它還有一個模擬器,就和我們用的手機一模一樣,上面也有簡單的幾個圖標:電話、短信等等,真的感覺到了不可思議,感覺到一種神秘,Android系統(tǒng)的開發(fā)就是在這樣的一個平臺上完成的,你可以對它進行你想要的修改,只要是你想到的,你都可以支盡情的嘗試,這讓人興奮。這門課的學習從這里就這樣開始了,《Android系統(tǒng)開發(fā)與實踐》這本課本它是以討論Android系統(tǒng)平臺為基礎,并結(jié)合實例講解教程和實踐指導類教材。本書中全方位的講解了Google開放移動應用平臺Android的各種特性,深入探討了應用程序的基本組件、界面布局的基礎,結(jié)合Internet實現(xiàn)通訊錄的設計和發(fā)送短信實例詳細介紹了Android系統(tǒng)平臺開發(fā) 1Android學習總結(jié) 的步驟和方法,從而實現(xiàn)對Android系統(tǒng)的平臺開發(fā)的深入了解。基于嵌入式技術(shù)的Android是目前增長速度最快的智能3G手機操作系統(tǒng),其底層系統(tǒng)是以Linux內(nèi)核為基礎,用C語言開發(fā);中間層包括函數(shù)庫library和虛擬機Dalvik,用C++語言開發(fā);上層應用軟件,包括通話程序,短信程序等,用Java語言開發(fā)。所以,要想好好的學習Android系統(tǒng)的開發(fā),那就必須掌握C++和Java語言,它們都是基礎。Android學習并不是那么的容易,你得很努力很認真的去學習,但如果只是淺淺的了解,那就簡單得多,但并不是這樣的,你得更加深入的去學習,你才算是懂一點。Linux是Android開發(fā)的基礎,Linux是一套免費使用和自由傳授的類UNIX操作系統(tǒng),它速度快,運行穩(wěn)定,對硬件的配置要求低,兼具了其他系統(tǒng)的優(yōu)點,最關(guān)鍵是可以免費使用,所以Linux得到了迅猛的發(fā)展,我們學習Android的開發(fā)就得了解Linux,它常用的一些操作命令是我們必須要理解和掌握的,比如說:su命令,它是最基本的命令之一,常用于不同用戶間切換。例如,如果登錄用戶為user1,要切換為user2,則用如下命令——$su user2 就行了;pwd命令,用于顯示用戶當前所在的目錄;cd命令,不僅顯示當前狀態(tài),還改變當前狀態(tài),它的用法跟DOS下的cd命令基本一致;ls命令,它跟DOS下的dir命令一樣,用于建立磁帶備份系統(tǒng),目前廣泛用于建立文件發(fā)布檔案;gzip命令,用于壓縮文件;mkdir命令,用于建立目錄,跟DOS下的md命令用法幾乎一樣的;cp命令,用于復制文件或目錄;rm命令,用于刪除文件或目錄;mv命令,用于移動文件和更多文件;reboot命令,重啟命令;halt命令,關(guān)閉命令。這些都是我們學習Android系統(tǒng)所必須掌握的。Android系統(tǒng)的開發(fā)更離不開Java,Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋?zhí)行的,健壯的,安全的,結(jié)構(gòu)中立的,可移植的,高效率的,多線程的和動態(tài)的語言,Java在Android平臺開發(fā)中的應用起到了很關(guān)鍵的作用,Android的開發(fā)需要Java的上引動開發(fā)工具,Eclipse開發(fā)工具就是目前最主流的Java開發(fā)工具,Eclipse本身只是一個框架平臺,2Android學習總結(jié)但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性,許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。Android的學習真的不是那么容易的,就一個平臺的搭建就已經(jīng)難到了我,就這樣一個開發(fā)平臺它得有一個Java的環(huán)境,還要有IDE等等,花了一大半的時間終于搭建了一個框架,它的一些插件必須要在線的升級,就是說必須要有網(wǎng)才行,這是一件很難熬的事,但等到搭建好后,那是一種成就感,通過學習讓我知道了Android系統(tǒng)也有它的不足之處:安全和隱私,由于手機與互聯(lián)網(wǎng)的緊密聯(lián)系,個人隱私很難得到保護,互聯(lián)網(wǎng)的深入發(fā)展也將會帶來新一輪的隱私危機;運營商仍然能夠影響到Android手機;同類機型用戶減少:在不少手機論壇都會有針對某一型號的資源,而對于Android平臺手機,由于廠商豐富,產(chǎn)品類型多樣,這樣使用同一款機型的用戶越來越少,缺少統(tǒng)一機型的程序強化;過分依賴開發(fā)商,缺少標準的配置等等的,這些的不足都在等待我們?nèi)ヌ剿鳌?/p>Android系統(tǒng)平臺的結(jié)構(gòu)有:應用程序?qū)?,應用程序框架層,運行庫層,Linux內(nèi)核層。只有了解了這些才能助我們更好的學習Android系統(tǒng),Android系統(tǒng)開發(fā)的相關(guān)環(huán)境必須安裝并配置好,這是一個細活:第一得安裝Java環(huán)境,然后還得修改Javadoc的link。第二設置環(huán)境變量,第三就安裝repo,第四得在線下載Android源碼并更新,第五是編譯Android源碼并得到~/project/Android/cupcake/out目錄,第六在模擬器上運行編譯好的Android源碼,第七編譯linux kernel,第八是編譯模塊,第九編譯SDK。這個安裝步驟我們得一步一步的做好,如果有哪一步做錯了,就會影響到最終的結(jié)果。當你把所有的準備工作做好后,創(chuàng)建一個新的Android項目,你就會有一點點的興奮與成就感,那是一種很自豪的一種享受。在Android系統(tǒng)的開發(fā)過程當中我們要了解和熟悉源碼的獲得,源碼樹結(jié)構(gòu)分析、Android源碼簡要分析、還有Android的移植,作為一個Android開發(fā)者,必要的時候閱讀下Android源碼可以拓寬一下自己的視野和對Android的認知程度,Google的Android的源 3Android學習總結(jié)碼管理倉庫用的是Git。Android是一個開源手機終端系統(tǒng),基于Linux內(nèi)核,我們可以下載一個Git客戶端,在Windows下安裝Git的客戶端軟件很方便的,安裝完成后,我們建立一個文件夾,就可用于存放將要下載的源碼,主機編譯工具和仿真環(huán)境,對于這些目錄和文件我們還要求會背下來,但得了解,了解它們是我們學習Android系統(tǒng)開發(fā)更加的輕松了。要想學習好Android系統(tǒng)的開發(fā),我們光學一些理論性的知識,那是遠遠不夠的,我們得把理論與實踐結(jié)合起來,才能起到事半功倍的效果,本來對于Android系統(tǒng)開發(fā)的學習就應該從實踐當中去深入的,在學習的過程中,我們要有足夠的耐心和足夠的時候,去練習,去實踐。在這門課當中的實例,比如,打電話,就讓我們眼前一亮了,我們一直以來每天在做的打電話就是這樣來的,這個實例提起了我們對Android系統(tǒng)的又一興趣,Android系統(tǒng)的開發(fā)不僅給我們的生活帶來了便利,也給我們帶來了歡樂。這以上就是這一段時間來我對Android系統(tǒng)開發(fā)的學習的一個總結(jié)與一個體會,Android系統(tǒng)的開發(fā)真的讓我長了不少的知識,也帶來了不少的見識,雖然我對于它的掌握還不那么的深,學習的也還不足,但我還是會一直堅持的學習下去,因為它的奇妙,因為我們的生活需要它,它的開發(fā)是永無止境的,它的學習也將是永無止境的。