版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
彭彬()
浙江大學(xué)城市學(xué)院計(jì)算分院
ZhejiangUniversityCityCollegeAndroid程序開(kāi)發(fā)綜合入門浙江大學(xué)城市學(xué)院移動(dòng)互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.課程簡(jiǎn)介
通過(guò)Android平臺(tái)及其應(yīng)用程序設(shè)計(jì)的教學(xué),使具備Java程序設(shè)計(jì)基礎(chǔ)的同學(xué)能夠具有理解移動(dòng)互聯(lián)網(wǎng)應(yīng)用結(jié)構(gòu),同時(shí)具有在Android平臺(tái)上開(kāi)發(fā)常規(guī)應(yīng)用的能力;以Android平臺(tái)為基礎(chǔ),理解移動(dòng)智能設(shè)備具有的可移動(dòng)性,多樣化的傳感器,基于位置服務(wù)等特點(diǎn);能夠結(jié)合移動(dòng)智能終端的特點(diǎn)分析和構(gòu)建應(yīng)用解決方案的能力;Android應(yīng)用開(kāi)發(fā)學(xué)習(xí)路徑①了解什么是Android②建立開(kāi)發(fā)環(huán)境③閱讀SDK文檔④背景知識(shí)Java編程基礎(chǔ)面向?qū)ο笤O(shè)計(jì)模式(有助于理解Android程序結(jié)構(gòu))
開(kāi)發(fā)環(huán)境的使用⑤學(xué)習(xí)Android應(yīng)用程序基礎(chǔ)構(gòu)造塊⑥學(xué)習(xí)和實(shí)踐Android應(yīng)用主要的java庫(kù)⑦學(xué)習(xí)和實(shí)踐完整Android應(yīng)用程序設(shè)計(jì)與實(shí)現(xiàn)開(kāi)發(fā)調(diào)試環(huán)境—AndroidStudio開(kāi)發(fā)調(diào)試環(huán)境--DDMS日志1)日志輸出日志1)日志查看使用LogCat窗口沒(méi)有集成開(kāi)發(fā)環(huán)境使用SDK中的logcat指令A(yù)ndroid基礎(chǔ)結(jié)構(gòu)浙江大學(xué)城市學(xué)院移動(dòng)互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.AndroidAndroid?,是第一個(gè)完整的、開(kāi)放的、免費(fèi)的智能移動(dòng)開(kāi)發(fā)平臺(tái)。Android平臺(tái)包括操作系統(tǒng)、中間件和一些關(guān)鍵應(yīng)用。Android應(yīng)用是基于JAVA的系統(tǒng),運(yùn)行在Linux2.6核上。Android系統(tǒng)結(jié)構(gòu)Android系統(tǒng)結(jié)構(gòu)Android的第1層次由C語(yǔ)言實(shí)現(xiàn),第2層次由C和/C++實(shí)現(xiàn),第3、4層次主要由Java代碼實(shí)現(xiàn)。第1層次和第2層次之間,從Linux操作系統(tǒng)的角度來(lái)來(lái)看,是內(nèi)核空間與用戶空間的分界線,第1層次運(yùn)行于內(nèi)核空間,第2、3、4層次運(yùn)行于用戶空間。第2層次和第3層次之間,是本地代碼層和Java代碼層的接口。第3層次和第4層次之間,是Android的系統(tǒng)API的接口,對(duì)于Android應(yīng)用程序的開(kāi)發(fā),第3層次以下的內(nèi)容是不可見(jiàn)的,僅考慮系統(tǒng)API即可。LinuxKernelAndroid基于Linux內(nèi)核2.6,但不是Linux內(nèi)核提供系統(tǒng)核心服務(wù),如進(jìn)程、內(nèi)存、電源管理,網(wǎng)絡(luò)連接,驅(qū)動(dòng)與安全等。并不包括全部的Linux。Android增強(qiáng)了Linux內(nèi)核的部分功能,包括電源管理,低內(nèi)存回收,日志與調(diào)試等。Libraries被各種Android應(yīng)用程序組件使用的功能,一般使用c/c++實(shí)現(xiàn),主要包括:媒體庫(kù):MPEG4H.264MP3JPGPNG.....WebKit:Web瀏覽引擎SQLite關(guān)系數(shù)據(jù)庫(kù)引擎2D,3D圖形庫(kù)、字體Libc:C庫(kù),Android沒(méi)有采用glibc,而是使用了自己開(kāi)發(fā)的BionicC庫(kù),以更適合移動(dòng)設(shè)備環(huán)境*通過(guò)NDK可以使用C語(yǔ)言編寫庫(kù)AndroidRuntime應(yīng)用開(kāi)發(fā)語(yǔ)言:JavaDalvik虛擬機(jī)指令:DalvikExcutable(區(qū)別于J2SE中的bytecode)
AndroidJava核心庫(kù)(包含部分J2SE庫(kù),基本上最常用的都有)AndroidFrameworkActivitymanager:管理運(yùn)行應(yīng)用程序ContentProvider:在各應(yīng)用之間共享數(shù)據(jù)ResourceManager:管理非代碼資源NotificationManager:顯示用戶提示和狀態(tài)欄ViewsSystem:可擴(kuò)展顯示,用于構(gòu)建UIAndroidApplicationsAndroid提供了一組核心應(yīng)用,例如聯(lián)系人,電子郵件,電話,瀏覽器,日歷,地圖,...用戶使用中安裝的所有程序基本上都是以應(yīng)用程序的形式存在于Android系統(tǒng)中的。*我們課程學(xué)習(xí)以及編寫的程序都是采用Java語(yǔ)言編寫的應(yīng)用程序,運(yùn)行在Dalvik虛擬機(jī)之上,存在于應(yīng)用程序?qū)?。Android的相關(guān)文件類型Java文件----應(yīng)用程序源文件Class文件----Java編譯后的目標(biāo)文件Google使用Dalvik來(lái)運(yùn)行應(yīng)用程序,Android的class文件是編譯過(guò)程中的中間目標(biāo)文件,需要鏈接成dex文件才能在Dalvik上運(yùn)行。Dex文件----Android平臺(tái)上的可執(zhí)行文件Android虛擬機(jī)Dalvik支持的字節(jié)碼文件格式。在編譯Java代碼之后,通過(guò)Android平臺(tái)上的工具可以將Java字節(jié)碼轉(zhuǎn)換成Dex字節(jié)碼。Android的相關(guān)文件類型Apk文件----Android上的安裝文件Apk是Android安裝包的擴(kuò)展名,一個(gè)Android安裝包包含了與該Android應(yīng)用程序相關(guān)的所有文件。apk文件將AndroidManifest.xml文件、應(yīng)用程序代碼(.dex文件)、資源文件和其他文件打成一個(gè)壓縮包。一個(gè)工程只能打進(jìn)一個(gè).apk文件。apk文件的本質(zhì)是一個(gè)zip包。.apkJavaCodeDataFilesResourcesFilesres/layout:布局文件res/drawable:可繪制資源res/anim:布局動(dòng)畫(huà)res/values:外部常量(strings,colors,styles等)res/xml:xml文件res/raw:二進(jìn)制流文件(音頻等)幾個(gè)概念A(yù)DK(Android
SDK)SDK
Platforms
&
SDK
Tools
&
SDK
Update
SiteAndroid
StudioAndroid版本&
Api
Level萬(wàn)能的HelloWorld新建HelloWorld工程:新建AndroidProject萬(wàn)能的HelloWorldStep1--填寫項(xiàng)目基本信息萬(wàn)能的HelloWorldStep2—指定運(yùn)行的目標(biāo)Android版本(比如5.0)萬(wàn)能的HelloWorldStep3選擇模版萬(wàn)能的HelloWorldStep4—填寫應(yīng)用程序基本信息。填寫完成后選擇Finish,完成項(xiàng)目創(chuàng)建。萬(wàn)能的HelloWorld創(chuàng)建完成的項(xiàng)目初始狀態(tài)萬(wàn)能的HelloWorld工程結(jié)構(gòu)(Project目錄)萬(wàn)能的HelloWorld啟動(dòng)運(yùn)行(手機(jī)或者模擬器)萬(wàn)能的HelloWorld運(yùn)行效果如右圖(模擬器在開(kāi)發(fā)的時(shí)候可以一直開(kāi)著)*至此,你已經(jīng)能夠編寫一個(gè)可以運(yùn)行的Android程序了。Let’s
Try:在真實(shí)手機(jī)上運(yùn)行此程序Android程序的基本構(gòu)造塊活動(dòng)(Activity)服務(wù)(Service)內(nèi)容提供者(ContentProvider)廣播接收器(BroadcastReceiver)*請(qǐng)回想一下普通Java程序構(gòu)造情況?*請(qǐng)回想一下Web程序構(gòu)造情況?活動(dòng)(Activity)活動(dòng)(Activity)是最基本的Android應(yīng)用程序組件,應(yīng)用程序中,一個(gè)活動(dòng)通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來(lái),活動(dòng)類將會(huì)顯示由視圖控件組成的用戶接口,并對(duì)事件做出響應(yīng)。
Activity可以簡(jiǎn)單理解為代表用戶所能看到的屏幕,Activity主要是處理一個(gè)應(yīng)用的整體性工作,例如,監(jiān)聽(tīng)系統(tǒng)事件(按鍵事件、觸摸屏事件等)、為用戶顯示指定的View,啟動(dòng)其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過(guò)Override父類的方法來(lái)實(shí)現(xiàn)各種功能服務(wù)(Service)服務(wù)(Service)沒(méi)有可視化的用戶界面,而是在一段時(shí)間內(nèi)在后臺(tái)運(yùn)行。比如說(shuō),一個(gè)服務(wù)可以在用戶做其它事情的時(shí)候在后臺(tái)播放背景音樂(lè)、從網(wǎng)絡(luò)上獲取一些數(shù)據(jù)。每個(gè)服務(wù)都繼承自Service基類。內(nèi)容提供者(ContentProvider)內(nèi)容提供者(ContentProvider)將一些特定的應(yīng)用程序數(shù)據(jù)供給其它應(yīng)用程序使用。數(shù)據(jù)可以存儲(chǔ)于文件系統(tǒng)、SQLite數(shù)據(jù)庫(kù)或其它方式。內(nèi)容提供者繼承于ContentProvider
基類,為其它應(yīng)用程序取用和存儲(chǔ)它管理的數(shù)據(jù)實(shí)現(xiàn)了一套標(biāo)準(zhǔn)方法。廣播接收器(BroadcastReceiver)廣播接收器(BroadcastReceiver)是一個(gè)專注于接收廣播通知信息,并做出對(duì)應(yīng)處理的組件。很多廣播是源自于系統(tǒng)代碼的──比如,通知時(shí)區(qū)改變、電池電量低、拍攝了一張照片或者用戶改變了語(yǔ)言選項(xiàng)。應(yīng)用程序也可以進(jìn)行廣播──比如說(shuō),通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對(duì)所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類。廣播接收器沒(méi)有用戶界面。然而,它們可以啟動(dòng)一個(gè)activity來(lái)響應(yīng)它們收到的信息,或者用NotificationManager來(lái)通知用戶?;顒?dòng)Activity浙江大學(xué)城市學(xué)院移動(dòng)互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.再一次看看HelloWorld中的Activity在onCreate中的代碼,我們仔細(xì)看一下:我們看見(jiàn)了1)布局文件引入2)資源引用3)UI對(duì)象實(shí)例的獲取4)事件響應(yīng)Activity基本編程任務(wù)與Activity簡(jiǎn)單的說(shuō),任務(wù)就是用戶所體驗(yàn)到的“應(yīng)用程序”。Android將這多個(gè)activity(用戶感受到的是多個(gè)有邏輯關(guān)聯(lián)的界面)放在同一個(gè)任務(wù)中來(lái)維持一個(gè)完整的用戶體驗(yàn)。它是安排在一個(gè)堆棧中的一組相關(guān)的activity。堆棧中的根activity就是啟動(dòng)了這整個(gè)任務(wù)的那個(gè)。而堆棧最上方的activity則是當(dāng)前運(yùn)行的──用戶直接對(duì)其進(jìn)行操作的。當(dāng)一個(gè)activity啟動(dòng)另外一個(gè)的時(shí)候,新的activity就被壓入堆棧,并成為當(dāng)前運(yùn)行的activity。而前一個(gè)activity仍保持在堆棧之中。當(dāng)用戶按下BACK鍵的時(shí)候,當(dāng)前activity出棧,而前一個(gè)恢復(fù)為當(dāng)前運(yùn)行的activity。*這就是為什么每個(gè)Android手機(jī)必須配置一個(gè)回退箭頭按鈕^_^Activity堆棧Activity4Activity3Activity2Activity1任務(wù)1Activity3Activity2Activity1任務(wù)2Activity1任務(wù)3Back鍵長(zhǎng)按Home鍵切換應(yīng)用*這就是為什么每個(gè)Android手機(jī)必須配置一個(gè)Home按鈕^_^Activity生命周期注意:1.不同的狀態(tài)切換時(shí)調(diào)用的Activity事件響應(yīng)方法2.Activity生命周期和運(yùn)行的進(jìn)程沒(méi)有對(duì)應(yīng)關(guān)系3.一般情況下當(dāng)出現(xiàn)系統(tǒng)需要回收資源強(qiáng)制殺死應(yīng)用時(shí),OnPause方法是最后一個(gè)保證被調(diào)用的方法。(極端情況除外)這個(gè)Activity生命周期一定要仔細(xì)理解,是Android程序模型的核心。Activity生命周期一個(gè)activity主要有三個(gè)狀態(tài):當(dāng)在屏幕前臺(tái)時(shí)(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運(yùn)行的狀態(tài)。它就是相應(yīng)用戶操作的activity。當(dāng)它失去焦點(diǎn)但仍然對(duì)用戶可見(jiàn)時(shí),它處于暫停狀態(tài)。即是:在它之上有另外一個(gè)activity。這個(gè)activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對(duì)用戶可見(jiàn)。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個(gè)activity。如果它完全被另一個(gè)activity覆蓋是,它處于停止?fàn)顟B(tài)。它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見(jiàn),所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會(huì)殺死這個(gè)activity。Activity生命周期七個(gè)方法定義了一個(gè)activity完整的生命周期。實(shí)現(xiàn)這些方法可以幫助你監(jiān)察三個(gè)嵌套的生命周期循環(huán):一個(gè)activity完整的生命周期自第一次調(diào)用onCreate()開(kāi)始,直至調(diào)用onDestroy()為止。activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。一個(gè)activity的可視生命周期自onStart()
調(diào)用開(kāi)始直到相應(yīng)的onStop()調(diào)用。在此期間,用戶可以在屏幕上看到此activity,盡管它也許并不是位于前臺(tái)或者正在與用戶做交互。一個(gè)activity的前臺(tái)生命周期自onResume()
調(diào)用起,至相應(yīng)的onPause()調(diào)用為止。在此期間,activity位于前臺(tái)最上面并與用戶進(jìn)行交互。activity會(huì)經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換──比如說(shuō)當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的activity啟動(dòng)時(shí),將調(diào)用onPause()
方法。當(dāng)activity獲得結(jié)果或者接收到新的intent的時(shí)候會(huì)調(diào)用onResume()
方法。因此,在這兩個(gè)方法中的代碼應(yīng)當(dāng)是輕量級(jí)的。Activity基本編程任務(wù)與Activity簡(jiǎn)單的說(shuō),任務(wù)就是用戶所體驗(yàn)到的“應(yīng)用程序”。Android將這多個(gè)activity(用戶感受到的是多個(gè)有邏輯關(guān)聯(lián)的界面)放在同一個(gè)任務(wù)中來(lái)維持一個(gè)完整的用戶體驗(yàn)。它是安排在一個(gè)堆棧中的一組相關(guān)的activity。堆棧中的根activity就是啟動(dòng)了這整個(gè)任務(wù)的那個(gè)。而堆棧最上方的activity則是當(dāng)前運(yùn)行的──用戶直接對(duì)其進(jìn)行操作的。當(dāng)一個(gè)activity啟動(dòng)另外一個(gè)的時(shí)候,新的activity就被壓入堆棧,并成為當(dāng)前運(yùn)行的activity。而前一個(gè)activity仍保持在堆棧之中。當(dāng)用戶按下BACK鍵的時(shí)候,當(dāng)前activity出棧,而前一個(gè)恢復(fù)為當(dāng)前運(yùn)行的activity。*這就是為什么每個(gè)Android手機(jī)必須配置一個(gè)回退箭頭按鈕^_^Activity堆棧Activity4Activity3Activity2Activity1任務(wù)1Activity3Activity2Activity1任務(wù)2Activity1任務(wù)3Back鍵長(zhǎng)按Home鍵切換應(yīng)用*這就是為什么每個(gè)Android手機(jī)必須配置一個(gè)Home按鈕^_^Activity生命周期注意:1.不同的狀態(tài)切換時(shí)調(diào)用的Activity事件響應(yīng)方法2.Activity生命周期和運(yùn)行的進(jìn)程沒(méi)有對(duì)應(yīng)關(guān)系3.一般情況下當(dāng)出現(xiàn)系統(tǒng)需要回收資源強(qiáng)制殺死應(yīng)用時(shí),OnPause方法是最后一個(gè)保證被調(diào)用的方法。(極端情況除外)這個(gè)Activity生命周期一定要仔細(xì)理解,是Android程序模型的核心。Activity生命周期一個(gè)activity主要有三個(gè)狀態(tài):當(dāng)在屏幕前臺(tái)時(shí)(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運(yùn)行的狀態(tài)。它就是相應(yīng)用戶操作的activity。當(dāng)它失去焦點(diǎn)但仍然對(duì)用戶可見(jiàn)時(shí),它處于暫停狀態(tài)。即是:在它之上有另外一個(gè)activity。這個(gè)activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對(duì)用戶可見(jiàn)。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個(gè)activity。如果它完全被另一個(gè)activity覆蓋是,它處于停止?fàn)顟B(tài)。它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見(jiàn),所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會(huì)殺死這個(gè)activity。Activity生命周期七個(gè)方法定義了一個(gè)activity完整的生命周期。實(shí)現(xiàn)這些方法可以幫助你監(jiān)察三個(gè)嵌套的生命周期循環(huán):一個(gè)activity完整的生命周期自第一次調(diào)用onCreate()開(kāi)始,直至調(diào)用onDestroy()為止。activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。一個(gè)activity的可視生命周期自onStart()
調(diào)用開(kāi)始直到相應(yīng)的onStop()調(diào)用。在此期間,用戶可以在屏幕上看到此activity,盡管它也許并不是位于前臺(tái)或者正在與用戶做交互。一個(gè)activity的前臺(tái)生命周期自onResume()
調(diào)用起,至相應(yīng)的onPause()調(diào)用為止。在此期間,activity位于前臺(tái)最上面并與用戶進(jìn)行交互。activity會(huì)經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換──比如說(shuō)當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的activity啟動(dòng)時(shí),將調(diào)用onPause()
方法。當(dāng)activity獲得結(jié)果或者接收到新的intent的時(shí)候會(huì)調(diào)用onResume()
方法。因此,在這兩個(gè)方法中的代碼應(yīng)當(dāng)是輕量級(jí)的。再一次看看HelloWorld中的其它成分來(lái)瀏覽一下資源目錄(res)中的:1)布局文件(layout)2)字符串常量(values/strings.xmlAndroid
Guide閱讀
Advanced:Thinking…我們現(xiàn)在知道了,可以大致認(rèn)為一個(gè)Activity和一個(gè)用戶界面相對(duì)應(yīng),一個(gè)應(yīng)用程序由若干個(gè)Activity通過(guò)一定的控制邏輯來(lái)構(gòu)造,而Android使用堆棧式的方式來(lái)管理Activity對(duì)象。
那么就存在一個(gè)問(wèn)題,Android的底層系統(tǒng)是Linux,那么具體執(zhí)行代碼的操作系統(tǒng)實(shí)體是進(jìn)程與線程,Activity和他們是什么關(guān)系呢?*課后思考題意圖Intent浙江大學(xué)城市學(xué)院移動(dòng)互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.提綱1.示例觀察Intent啟動(dòng)第二個(gè)Activity2.理解Intent3.IntentFilter(或者稱為Mapping機(jī)制)4.意圖預(yù)定義Intent5.自定義Intent示例通過(guò)例子TwoActivity觀察下面的基本實(shí)現(xiàn)手法:1.在程序中使用多個(gè)Activity2.使用Intent啟動(dòng)Activity3.在兩個(gè)Activity間傳遞數(shù)據(jù)意圖(Intent)
Intent機(jī)制本質(zhì)上是Android系統(tǒng)上的一種消息機(jī)制,用于運(yùn)行時(shí)綁定請(qǐng)求者與實(shí)現(xiàn)者。Intent機(jī)制用于在程序內(nèi)部或者程序之間調(diào)用不同的組件。應(yīng)用程序的三個(gè)核心組件-活動(dòng),服務(wù)和廣播接收器是通過(guò)Intent來(lái)激活的。*活動(dòng),服務(wù)和廣播接收器使用的Intent是不會(huì)混淆的*下面Intent和意圖視為同義詞
意圖的工作過(guò)程Intent分類意圖分為兩種:顯式意圖:通過(guò)名字指明目標(biāo)組件(設(shè)置了組件名稱的Intent對(duì)象)。既然組件名稱通常不為其他應(yīng)用程序的開(kāi)發(fā)者所了解,顯式意圖主要用作應(yīng)用程序的內(nèi)部消息(你自己程序的不同Activity間的調(diào)用);隱式意圖
不命名目標(biāo)組件(組件名稱字段為空)。隱式意圖經(jīng)常用來(lái)激活其他應(yīng)用程序的組件(比如啟動(dòng)一個(gè)發(fā)短信的Activity)。使用顯式意圖啟動(dòng)一個(gè)Activity下面的示例代碼中使用了顯示意圖啟動(dòng)一個(gè)Activity(SecondActivity),代碼中通過(guò)一個(gè)Java類的class成員指定啟動(dòng)一個(gè)Activity,所以這種方式成為顯式意圖。使用隱式意圖啟動(dòng)一個(gè)Activity下面的示例代碼中使用了隱式意圖啟動(dòng)一個(gè)Activity,本例中向系統(tǒng)請(qǐng)求啟動(dòng)一個(gè)能處理該Intent的Activity(匹配Action,Uri)Intent對(duì)象那么Intent對(duì)象可以包含哪幾種信息呢?可以包括以下幾類信息:1)組件名稱Componentname:應(yīng)該處理這個(gè)意圖的組件名字.2)動(dòng)作Action:一個(gè)將被執(zhí)行的動(dòng)作的字符串名3)數(shù)據(jù)Data:想要操作的數(shù)據(jù)統(tǒng)一資源標(biāo)識(shí)符(URI)或者是數(shù)據(jù)的MIME類型(多用途互聯(lián)網(wǎng)郵件擴(kuò)展),不同的動(dòng)作伴隨著不同的數(shù)據(jù)規(guī)格。4)附加類別Category:一個(gè)包含關(guān)于應(yīng)該處理這個(gè)意圖的組件的附加信息的字符串。5)附加信息Extras:應(yīng)該遞交給意圖處理組件的附加信息鍵-值對(duì)(Map類型數(shù)據(jù)結(jié)構(gòu),主要用于數(shù)據(jù)傳遞)。6)標(biāo)識(shí)Flag:主要用于指示Android系統(tǒng)如何啟動(dòng)一個(gè)Activity或者配置一些Activity行為(比如指示新Activity不要出現(xiàn)在最近啟動(dòng)應(yīng)用程序的列表中)*什么是MIME?Intent對(duì)象ponent組件名稱Componentname:應(yīng)該處理這個(gè)意圖的組件名字,如果指定了此屬性,那么我們就成為此Intent是顯式的Intent,系統(tǒng)將啟動(dòng)此名稱指定的組件;如果沒(méi)有指定組件名稱的Intent就是隱式意圖,系統(tǒng)通過(guò)過(guò)濾機(jī)制(通過(guò)匹配Action,Data和Category)來(lái)確定要啟動(dòng)的組件;系統(tǒng)提供了多個(gè)Api使用多個(gè)方式來(lái)設(shè)置組件名稱:1)Intent構(gòu)造函數(shù)2)ponent()3)setClass()4)setClassName()Intent對(duì)象-Action動(dòng)作Action:通過(guò)構(gòu)造函數(shù)或者setAction()方法可以設(shè)置意圖的Action屬性,此屬性實(shí)際上是一個(gè)字符串類型;系統(tǒng)有大量預(yù)定義的Action常量值,當(dāng)這些常量值不足以供應(yīng)用程序使用的時(shí)候,可以定義自己的Action常量;如果定義自己的Action,需要按照規(guī)范定義Action值:包名+Action名系統(tǒng)預(yù)定義的Action都有一定的含義:Intent對(duì)象-Data數(shù)據(jù)類型Data:其值是URI類型的值或者M(jìn)IME類型的值,或者兩者都指定,用于指定需要處理的數(shù)據(jù)類型,比如當(dāng)意圖包含ACTION_EDIT動(dòng)作時(shí),Data值就指示系統(tǒng)需要編輯的數(shù)據(jù)的實(shí)際類型;1)使用setData(Uri)設(shè)置數(shù)據(jù)類型2)使用setType(String)設(shè)置MIME類型3)使用setDataAndType(Uri,String)同時(shí)指定如何傳遞Data值的原則是盡可能幫助Android系統(tǒng)選擇合適的處理程序;*閱讀文檔時(shí)要注意細(xì)節(jié)說(shuō)明,特別是注意點(diǎn),比如在此節(jié)的Google文檔中:*什么是URI?Intent對(duì)象-Data示例Intent對(duì)象-Category附加類別Category:一個(gè)包含應(yīng)處理Intent組件類型的附加信息的字符串。在一個(gè)Intent中可以包含任意多個(gè)Category值。Category值用于幫助系統(tǒng)選擇相應(yīng)Intent的目標(biāo)對(duì)象。1)使用addCategory(String)設(shè)置一個(gè)Category值系統(tǒng)預(yù)定義了很多Category值(閱讀參考手冊(cè)),比如下面兩個(gè)值:Intent對(duì)象-Extra附加數(shù)據(jù)Extra:Extra主要用于傳遞數(shù)據(jù),值采用key-value對(duì)的方式(Map類型數(shù)據(jù)結(jié)構(gòu)),使用下面的Api1)putExtra()加一個(gè)值2)putExtras()加一組值使用什么值是發(fā)送Intent的組件和接收Intent的對(duì)象共同決定的;Intent對(duì)象-Flag處理標(biāo)識(shí)Flag:用來(lái)指示系統(tǒng)如何啟動(dòng)組件等各種行為。Flag都是系統(tǒng)預(yù)定義的。使用Api1)setFlags(int)設(shè)置標(biāo)識(shí)比如下面的Flag(完整列表查看系統(tǒng)參考手冊(cè))Intent過(guò)濾器示例Intent解析意圖解析(只有隱式意圖需要解析):通過(guò)比較意圖對(duì)象的內(nèi)容和意圖過(guò)濾器來(lái)匹配該意圖的處理者。意圖過(guò)濾器公布一個(gè)組件具備的能力以及限定它能處理的意圖。如果一個(gè)組件沒(méi)有任何的意圖過(guò)濾器,那它只能接收顯式意圖。一個(gè)帶過(guò)濾器的組件可以同時(shí)接收顯式和隱式意圖。當(dāng)一個(gè)意圖對(duì)象被一個(gè)意圖過(guò)濾器測(cè)試時(shí),只有三個(gè)方面會(huì)被參考到:動(dòng)作(Action)數(shù)據(jù)(URI以及數(shù)據(jù)類型)類別(Category)Intent過(guò)濾器匹配在這個(gè)解析過(guò)程中,Android是通過(guò)Intent的action、type、category這三個(gè)屬性來(lái)進(jìn)行判斷的,判斷過(guò)程如下:
1)如果Intent指明了action,則目標(biāo)組件的IntentFilter的action列表中就必須包含有這個(gè)action,否則不能匹配;
2)如果Intent沒(méi)有提供type,系統(tǒng)將從data中得到數(shù)據(jù)類型。和action一樣,目標(biāo)組件的數(shù)據(jù)類型列表中必須包含Intent的數(shù)據(jù)類型,否則不能匹配。
3)如果Intent中的數(shù)據(jù)不是content:類型的URI,而且Intent也沒(méi)有明確指定它的type,將根據(jù)Intent中數(shù)據(jù)的scheme(比如http:或者mailto:)進(jìn)行匹配。同上,Intent的scheme必須出現(xiàn)在目標(biāo)組件的scheme列表中。
4)如果Intent指定了一個(gè)或多個(gè)category,這些類別必須全部出現(xiàn)在組件的類別列表中。比如Intent中包含了兩個(gè)類別:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目標(biāo)組件必須至少包含這兩個(gè)類別。Intent過(guò)濾器示例2<activityclass=".NotesList"android:label="@string/title_notes_list">
<intent-filter>
<actionandroid:name="ent.action.MAIN"/>
<categoryandroid:name="ent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<actionandroid:name="ent.action.VIEW"/>
<actionandroid:name="ent.action.EDIT"/>
<actionandroid:name="ent.action.PICK"/>
<categoryandroid:name="ent.category.DEFAULT"/>
<dataandroid:mimeType="vnd.android.cursor.dir/vnd.google.note"/>
</intent-filter>
<intent-filter>
<actionandroid:name="ent.action.GET_CONTENT"/>
<categoryandroid:name="ent.category.DEFAULT"/>
<dataandroid:mimeType="vnd.android.cursor.item/vnd.google.note"/>
</intent-filter>
</activity>
理解Manifest文件浙江大學(xué)城市學(xué)院移動(dòng)互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.Manifest文件系統(tǒng)如何確知一個(gè)應(yīng)用程序包含哪些Activity,Service等構(gòu)造塊?一個(gè)應(yīng)用程序的Activity構(gòu)造塊能響應(yīng)哪些意圖?一個(gè)應(yīng)用程序的需要怎樣的權(quán)限?……一個(gè)應(yīng)用程序的所有的構(gòu)造塊以及應(yīng)用程序應(yīng)該聲明的種種要素都是在一個(gè)xml文件中定義的,這就是Manifest文件,又被稱為清單文件.每個(gè)應(yīng)用程序的清單文件AndroidManifest.xml(一定是這個(gè)名字)在它的根目錄里。這個(gè)清單文件給Android系統(tǒng)提供了關(guān)于這個(gè)應(yīng)用程序的基本信息,系統(tǒng)在能運(yùn)行任何程序代碼之前必須知道這些信息。Manifest文件AndroidManifest.xml主要包含以下功能:命名應(yīng)用程序的Java包,這個(gè)包名用來(lái)唯一標(biāo)識(shí)應(yīng)用程序;描述應(yīng)用程序的組件-活動(dòng),服務(wù),廣播接收者,以及組成應(yīng)用程序的內(nèi)容提供者;決定應(yīng)用程序組件運(yùn)行在哪個(gè)進(jìn)程里面;聲明應(yīng)用程序所必須具備的權(quán)限,用以訪問(wèn)受保護(hù)的部分API,以及和其它應(yīng)用程序交互;聲明應(yīng)用程序其他的必備權(quán)限,用以組件之間的交互;列舉測(cè)試設(shè)備Instrumentation類,用來(lái)提供應(yīng)用程序運(yùn)行時(shí)所需的環(huán)境配置及其他信息,這些聲明只在程序開(kāi)發(fā)和測(cè)試階段存在,發(fā)布前將被刪除;聲明應(yīng)用程序所要求的AndroidAPI的最低版本級(jí)別;列舉application所需要鏈接的庫(kù);課堂閱讀
Manifest文件<?xmlversion="1.0"encoding="utf-8"?>
<manifest>
<uses-permission/>
<application>
<activity>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</activity>
<service>
<intent-filter>...</intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter>...</intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<meta-data/>
</provider>
</application>
</manifest>
一些要點(diǎn)元素只有
<manifest>
和
<application>
元素是必需的,它們都必須存在并且只能出現(xiàn)一次。其他大部分元素可以出現(xiàn)多次或者根本不出現(xiàn),即便清單文件中必須至少存在其中某些元素才能完成任何有意義的操作也是如此。如果一個(gè)元素包含某些內(nèi)容,也就包含其他元素。所有值均通過(guò)屬性進(jìn)行設(shè)置,而不是通過(guò)元素內(nèi)的字符數(shù)據(jù)設(shè)置。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于大數(shù)據(jù)的能效優(yōu)化
- 2025廣西南寧市住房保障發(fā)展中心招聘編外技術(shù)行政輔助崗工作人員1人備考筆試題庫(kù)及答案解析
- 化妝品行業(yè)新品發(fā)布活動(dòng)策劃
- 課堂教學(xué)反思與改進(jìn)策略報(bào)告
- 雙創(chuàng)培訓(xùn)學(xué)習(xí)總結(jié)及實(shí)踐應(yīng)用報(bào)告
- 教師資格考試教育心理學(xué)知識(shí)點(diǎn)總結(jié)
- 主題班會(huì)教案七年級(jí)主題班會(huì)我想飛得更高教案(2025-2026學(xué)年)
- 2025四川宜賓市消防救援局第五次招聘政府專職消防員35人參考考試題庫(kù)及答案解析
- 雙抗消化道出血教案
- 藥物化學(xué)第四章藥物代謝反應(yīng)教案
- 推廣示范基地協(xié)議書(shū)
- 消防員心理健康教育課件
- 2025年服裝行業(yè)五年發(fā)展時(shí)尚產(chǎn)業(yè)與可持續(xù)發(fā)展報(bào)告
- 《下肢深靜脈血栓形成介入治療護(hù)理實(shí)踐指南》的解讀2025
- 2025年社區(qū)電動(dòng)汽車充電站建設(shè)項(xiàng)目可行性研究報(bào)告及總結(jié)分析
- 經(jīng)營(yíng)區(qū)域保護(hù)合同范本
- 中藥熱奄包療法
- 安利四大基石課件
- 2025年滁州輔警招聘考試真題及答案詳解(歷年真題)
- GB/T 11143-2025加抑制劑礦物油在水存在下防銹性能試驗(yàn)法
- 2025年希望杯IHC-二年級(jí)真題(含答案)
評(píng)論
0/150
提交評(píng)論