浙大城市學(xué)院-1 .android程序開發(fā)綜合入門_第1頁
浙大城市學(xué)院-1 .android程序開發(fā)綜合入門_第2頁
浙大城市學(xué)院-1 .android程序開發(fā)綜合入門_第3頁
浙大城市學(xué)院-1 .android程序開發(fā)綜合入門_第4頁
浙大城市學(xué)院-1 .android程序開發(fā)綜合入門_第5頁
已閱讀5頁,還剩78頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

彭彬()

浙江大學(xué)城市學(xué)院計(jì)算分院

ZhejiangUniversityCityCollegeAndroid程序開發(fā)綜合入門浙江大學(xué)城市學(xué)院移動互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.課程簡介

通過Android平臺及其應(yīng)用程序設(shè)計(jì)的教學(xué),使具備Java程序設(shè)計(jì)基礎(chǔ)的同學(xué)能夠具有理解移動互聯(lián)網(wǎng)應(yīng)用結(jié)構(gòu),同時具有在Android平臺上開發(fā)常規(guī)應(yīng)用的能力;以Android平臺為基礎(chǔ),理解移動智能設(shè)備具有的可移動性,多樣化的傳感器,基于位置服務(wù)等特點(diǎn);能夠結(jié)合移動智能終端的特點(diǎn)分析和構(gòu)建應(yīng)用解決方案的能力;Android應(yīng)用開發(fā)學(xué)習(xí)路徑①了解什么是Android②建立開發(fā)環(huán)境③閱讀SDK文檔④背景知識Java編程基礎(chǔ)面向?qū)ο笤O(shè)計(jì)模式(有助于理解Android程序結(jié)構(gòu))

開發(fā)環(huán)境的使用⑤學(xué)習(xí)Android應(yīng)用程序基礎(chǔ)構(gòu)造塊⑥學(xué)習(xí)和實(shí)踐Android應(yīng)用主要的java庫⑦學(xué)習(xí)和實(shí)踐完整Android應(yīng)用程序設(shè)計(jì)與實(shí)現(xiàn)開發(fā)調(diào)試環(huán)境—AndroidStudio開發(fā)調(diào)試環(huán)境--DDMS日志1)日志輸出日志1)日志查看使用LogCat窗口沒有集成開發(fā)環(huán)境使用SDK中的logcat指令A(yù)ndroid基礎(chǔ)結(jié)構(gòu)浙江大學(xué)城市學(xué)院移動互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.AndroidAndroid?,是第一個完整的、開放的、免費(fèi)的智能移動開發(fā)平臺。Android平臺包括操作系統(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語言實(shí)現(xiàn),第2層次由C和/C++實(shí)現(xiàn),第3、4層次主要由Java代碼實(shí)現(xiàn)。第1層次和第2層次之間,從Linux操作系統(tǒng)的角度來來看,是內(nèi)核空間與用戶空間的分界線,第1層次運(yùn)行于內(nèi)核空間,第2、3、4層次運(yùn)行于用戶空間。第2層次和第3層次之間,是本地代碼層和Java代碼層的接口。第3層次和第4層次之間,是Android的系統(tǒng)API的接口,對于Android應(yīng)用程序的開發(fā),第3層次以下的內(nèi)容是不可見的,僅考慮系統(tǒng)API即可。LinuxKernelAndroid基于Linux內(nèi)核2.6,但不是Linux內(nèi)核提供系統(tǒng)核心服務(wù),如進(jìn)程、內(nèi)存、電源管理,網(wǎng)絡(luò)連接,驅(qū)動與安全等。并不包括全部的Linux。Android增強(qiáng)了Linux內(nèi)核的部分功能,包括電源管理,低內(nèi)存回收,日志與調(diào)試等。Libraries被各種Android應(yīng)用程序組件使用的功能,一般使用c/c++實(shí)現(xiàn),主要包括:媒體庫:MPEG4H.264MP3JPGPNG.....WebKit:Web瀏覽引擎SQLite關(guān)系數(shù)據(jù)庫引擎2D,3D圖形庫、字體Libc:C庫,Android沒有采用glibc,而是使用了自己開發(fā)的BionicC庫,以更適合移動設(shè)備環(huán)境*通過NDK可以使用C語言編寫庫AndroidRuntime應(yīng)用開發(fā)語言:JavaDalvik虛擬機(jī)指令:DalvikExcutable(區(qū)別于J2SE中的bytecode)

AndroidJava核心庫(包含部分J2SE庫,基本上最常用的都有)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īng)用程序,運(yùn)行在Dalvik虛擬機(jī)之上,存在于應(yīng)用程序?qū)印ndroid的相關(guān)文件類型Java文件----應(yīng)用程序源文件Class文件----Java編譯后的目標(biāo)文件Google使用Dalvik來運(yùn)行應(yīng)用程序,Android的class文件是編譯過程中的中間目標(biāo)文件,需要鏈接成dex文件才能在Dalvik上運(yùn)行。Dex文件----Android平臺上的可執(zhí)行文件Android虛擬機(jī)Dalvik支持的字節(jié)碼文件格式。在編譯Java代碼之后,通過Android平臺上的工具可以將Java字節(jié)碼轉(zhuǎn)換成Dex字節(jié)碼。Android的相關(guān)文件類型Apk文件----Android上的安裝文件Apk是Android安裝包的擴(kuò)展名,一個Android安裝包包含了與該Android應(yīng)用程序相關(guān)的所有文件。apk文件將AndroidManifest.xml文件、應(yīng)用程序代碼(.dex文件)、資源文件和其他文件打成一個壓縮包。一個工程只能打進(jìn)一個.apk文件。apk文件的本質(zhì)是一個zip包。.apkJavaCodeDataFilesResourcesFilesres/layout:布局文件res/drawable:可繪制資源res/anim:布局動畫res/values:外部常量(strings,colors,styles等)res/xml:xml文件res/raw:二進(jìn)制流文件(音頻等)幾個概念A(yù)DK(Android

SDK)SDK

Platforms

&

SDK

Tools

&

SDK

Update

SiteAndroid

StudioAndroid版本&

Api

Level萬能的HelloWorld新建HelloWorld工程:新建AndroidProject萬能的HelloWorldStep1--填寫項(xiàng)目基本信息萬能的HelloWorldStep2—指定運(yùn)行的目標(biāo)Android版本(比如5.0)萬能的HelloWorldStep3選擇模版萬能的HelloWorldStep4—填寫應(yīng)用程序基本信息。填寫完成后選擇Finish,完成項(xiàng)目創(chuàng)建。萬能的HelloWorld創(chuàng)建完成的項(xiàng)目初始狀態(tài)萬能的HelloWorld工程結(jié)構(gòu)(Project目錄)萬能的HelloWorld啟動運(yùn)行(手機(jī)或者模擬器)萬能的HelloWorld運(yùn)行效果如右圖(模擬器在開發(fā)的時候可以一直開著)*至此,你已經(jīng)能夠編寫一個可以運(yùn)行的Android程序了。Let’s

Try:在真實(shí)手機(jī)上運(yùn)行此程序Android程序的基本構(gòu)造塊活動(Activity)服務(wù)(Service)內(nèi)容提供者(ContentProvider)廣播接收器(BroadcastReceiver)*請回想一下普通Java程序構(gòu)造情況?*請回想一下Web程序構(gòu)造情況?活動(Activity)活動(Activity)是最基本的Android應(yīng)用程序組件,應(yīng)用程序中,一個活動通常就是一個單獨(dú)的屏幕。每一個活動都被實(shí)現(xiàn)為一個獨(dú)立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應(yīng)。

Activity可以簡單理解為代表用戶所能看到的屏幕,Activity主要是處理一個應(yīng)用的整體性工作,例如,監(jiān)聽系統(tǒng)事件(按鍵事件、觸摸屏事件等)、為用戶顯示指定的View,啟動其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過Override父類的方法來實(shí)現(xiàn)各種功能服務(wù)(Service)服務(wù)(Service)沒有可視化的用戶界面,而是在一段時間內(nèi)在后臺運(yùn)行。比如說,一個服務(wù)可以在用戶做其它事情的時候在后臺播放背景音樂、從網(wǎng)絡(luò)上獲取一些數(shù)據(jù)。每個服務(wù)都繼承自Service基類。內(nèi)容提供者(ContentProvider)內(nèi)容提供者(ContentProvider)將一些特定的應(yīng)用程序數(shù)據(jù)供給其它應(yīng)用程序使用。數(shù)據(jù)可以存儲于文件系統(tǒng)、SQLite數(shù)據(jù)庫或其它方式。內(nèi)容提供者繼承于ContentProvider

基類,為其它應(yīng)用程序取用和存儲它管理的數(shù)據(jù)實(shí)現(xiàn)了一套標(biāo)準(zhǔn)方法。廣播接收器(BroadcastReceiver)廣播接收器(BroadcastReceiver)是一個專注于接收廣播通知信息,并做出對應(yīng)處理的組件。很多廣播是源自于系統(tǒng)代碼的──比如,通知時區(qū)改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項(xiàng)。應(yīng)用程序也可以進(jìn)行廣播──比如說,通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶?;顒覣ctivity浙江大學(xué)城市學(xué)院移動互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.再一次看看HelloWorld中的Activity在onCreate中的代碼,我們仔細(xì)看一下:我們看見了1)布局文件引入2)資源引用3)UI對象實(shí)例的獲取4)事件響應(yīng)Activity基本編程任務(wù)與Activity簡單的說,任務(wù)就是用戶所體驗(yàn)到的“應(yīng)用程序”。Android將這多個activity(用戶感受到的是多個有邏輯關(guān)聯(lián)的界面)放在同一個任務(wù)中來維持一個完整的用戶體驗(yàn)。它是安排在一個堆棧中的一組相關(guān)的activity。堆棧中的根activity就是啟動了這整個任務(wù)的那個。而堆棧最上方的activity則是當(dāng)前運(yùn)行的──用戶直接對其進(jìn)行操作的。當(dāng)一個activity啟動另外一個的時候,新的activity就被壓入堆棧,并成為當(dāng)前運(yùn)行的activity。而前一個activity仍保持在堆棧之中。當(dāng)用戶按下BACK鍵的時候,當(dāng)前activity出棧,而前一個恢復(fù)為當(dāng)前運(yùn)行的activity。*這就是為什么每個Android手機(jī)必須配置一個回退箭頭按鈕^_^Activity堆棧Activity4Activity3Activity2Activity1任務(wù)1Activity3Activity2Activity1任務(wù)2Activity1任務(wù)3Back鍵長按Home鍵切換應(yīng)用*這就是為什么每個Android手機(jī)必須配置一個Home按鈕^_^Activity生命周期注意:1.不同的狀態(tài)切換時調(diào)用的Activity事件響應(yīng)方法2.Activity生命周期和運(yùn)行的進(jìn)程沒有對應(yīng)關(guān)系3.一般情況下當(dāng)出現(xiàn)系統(tǒng)需要回收資源強(qiáng)制殺死應(yīng)用時,OnPause方法是最后一個保證被調(diào)用的方法。(極端情況除外)這個Activity生命周期一定要仔細(xì)理解,是Android程序模型的核心。Activity生命周期一個activity主要有三個狀態(tài):當(dāng)在屏幕前臺時(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運(yùn)行的狀態(tài)。它就是相應(yīng)用戶操作的activity。當(dāng)它失去焦點(diǎn)但仍然對用戶可見時,它處于暫停狀態(tài)。即是:在它之上有另外一個activity。這個activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對用戶可見。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個activity。如果它完全被另一個activity覆蓋是,它處于停止?fàn)顟B(tài)。它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見,所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會殺死這個activity。Activity生命周期七個方法定義了一個activity完整的生命周期。實(shí)現(xiàn)這些方法可以幫助你監(jiān)察三個嵌套的生命周期循環(huán):一個activity完整的生命周期自第一次調(diào)用onCreate()開始,直至調(diào)用onDestroy()為止。activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。一個activity的可視生命周期自onStart()

調(diào)用開始直到相應(yīng)的onStop()調(diào)用。在此期間,用戶可以在屏幕上看到此activity,盡管它也許并不是位于前臺或者正在與用戶做交互。一個activity的前臺生命周期自onResume()

調(diào)用起,至相應(yīng)的onPause()調(diào)用為止。在此期間,activity位于前臺最上面并與用戶進(jìn)行交互。activity會經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換──比如說當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的activity啟動時,將調(diào)用onPause()

方法。當(dāng)activity獲得結(jié)果或者接收到新的intent的時候會調(diào)用onResume()

方法。因此,在這兩個方法中的代碼應(yīng)當(dāng)是輕量級的。Activity基本編程任務(wù)與Activity簡單的說,任務(wù)就是用戶所體驗(yàn)到的“應(yīng)用程序”。Android將這多個activity(用戶感受到的是多個有邏輯關(guān)聯(lián)的界面)放在同一個任務(wù)中來維持一個完整的用戶體驗(yàn)。它是安排在一個堆棧中的一組相關(guān)的activity。堆棧中的根activity就是啟動了這整個任務(wù)的那個。而堆棧最上方的activity則是當(dāng)前運(yùn)行的──用戶直接對其進(jìn)行操作的。當(dāng)一個activity啟動另外一個的時候,新的activity就被壓入堆棧,并成為當(dāng)前運(yùn)行的activity。而前一個activity仍保持在堆棧之中。當(dāng)用戶按下BACK鍵的時候,當(dāng)前activity出棧,而前一個恢復(fù)為當(dāng)前運(yùn)行的activity。*這就是為什么每個Android手機(jī)必須配置一個回退箭頭按鈕^_^Activity堆棧Activity4Activity3Activity2Activity1任務(wù)1Activity3Activity2Activity1任務(wù)2Activity1任務(wù)3Back鍵長按Home鍵切換應(yīng)用*這就是為什么每個Android手機(jī)必須配置一個Home按鈕^_^Activity生命周期注意:1.不同的狀態(tài)切換時調(diào)用的Activity事件響應(yīng)方法2.Activity生命周期和運(yùn)行的進(jìn)程沒有對應(yīng)關(guān)系3.一般情況下當(dāng)出現(xiàn)系統(tǒng)需要回收資源強(qiáng)制殺死應(yīng)用時,OnPause方法是最后一個保證被調(diào)用的方法。(極端情況除外)這個Activity生命周期一定要仔細(xì)理解,是Android程序模型的核心。Activity生命周期一個activity主要有三個狀態(tài):當(dāng)在屏幕前臺時(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運(yùn)行的狀態(tài)。它就是相應(yīng)用戶操作的activity。當(dāng)它失去焦點(diǎn)但仍然對用戶可見時,它處于暫停狀態(tài)。即是:在它之上有另外一個activity。這個activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對用戶可見。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個activity。如果它完全被另一個activity覆蓋是,它處于停止?fàn)顟B(tài)。它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見,所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會殺死這個activity。Activity生命周期七個方法定義了一個activity完整的生命周期。實(shí)現(xiàn)這些方法可以幫助你監(jiān)察三個嵌套的生命周期循環(huán):一個activity完整的生命周期自第一次調(diào)用onCreate()開始,直至調(diào)用onDestroy()為止。activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。一個activity的可視生命周期自onStart()

調(diào)用開始直到相應(yīng)的onStop()調(diào)用。在此期間,用戶可以在屏幕上看到此activity,盡管它也許并不是位于前臺或者正在與用戶做交互。一個activity的前臺生命周期自onResume()

調(diào)用起,至相應(yīng)的onPause()調(diào)用為止。在此期間,activity位于前臺最上面并與用戶進(jìn)行交互。activity會經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換──比如說當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或有新的activity啟動時,將調(diào)用onPause()

方法。當(dāng)activity獲得結(jié)果或者接收到新的intent的時候會調(diào)用onResume()

方法。因此,在這兩個方法中的代碼應(yīng)當(dāng)是輕量級的。再一次看看HelloWorld中的其它成分來瀏覽一下資源目錄(res)中的:1)布局文件(layout)2)字符串常量(values/strings.xmlAndroid

Guide閱讀

Advanced:Thinking…我們現(xiàn)在知道了,可以大致認(rèn)為一個Activity和一個用戶界面相對應(yīng),一個應(yīng)用程序由若干個Activity通過一定的控制邏輯來構(gòu)造,而Android使用堆棧式的方式來管理Activity對象。

那么就存在一個問題,Android的底層系統(tǒng)是Linux,那么具體執(zhí)行代碼的操作系統(tǒng)實(shí)體是進(jìn)程與線程,Activity和他們是什么關(guān)系呢?*課后思考題意圖Intent浙江大學(xué)城市學(xué)院移動互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.提綱1.示例觀察Intent啟動第二個Activity2.理解Intent3.IntentFilter(或者稱為Mapping機(jī)制)4.意圖預(yù)定義Intent5.自定義Intent示例通過例子TwoActivity觀察下面的基本實(shí)現(xiàn)手法:1.在程序中使用多個Activity2.使用Intent啟動Activity3.在兩個Activity間傳遞數(shù)據(jù)意圖(Intent)

Intent機(jī)制本質(zhì)上是Android系統(tǒng)上的一種消息機(jī)制,用于運(yùn)行時綁定請求者與實(shí)現(xiàn)者。Intent機(jī)制用于在程序內(nèi)部或者程序之間調(diào)用不同的組件。應(yīng)用程序的三個核心組件-活動,服務(wù)和廣播接收器是通過Intent來激活的。*活動,服務(wù)和廣播接收器使用的Intent是不會混淆的*下面Intent和意圖視為同義詞

意圖的工作過程Intent分類意圖分為兩種:顯式意圖:通過名字指明目標(biāo)組件(設(shè)置了組件名稱的Intent對象)。既然組件名稱通常不為其他應(yīng)用程序的開發(fā)者所了解,顯式意圖主要用作應(yīng)用程序的內(nèi)部消息(你自己程序的不同Activity間的調(diào)用);隱式意圖

不命名目標(biāo)組件(組件名稱字段為空)。隱式意圖經(jīng)常用來激活其他應(yīng)用程序的組件(比如啟動一個發(fā)短信的Activity)。使用顯式意圖啟動一個Activity下面的示例代碼中使用了顯示意圖啟動一個Activity(SecondActivity),代碼中通過一個Java類的class成員指定啟動一個Activity,所以這種方式成為顯式意圖。使用隱式意圖啟動一個Activity下面的示例代碼中使用了隱式意圖啟動一個Activity,本例中向系統(tǒng)請求啟動一個能處理該Intent的Activity(匹配Action,Uri)Intent對象那么Intent對象可以包含哪幾種信息呢?可以包括以下幾類信息:1)組件名稱Componentname:應(yīng)該處理這個意圖的組件名字.2)動作Action:一個將被執(zhí)行的動作的字符串名3)數(shù)據(jù)Data:想要操作的數(shù)據(jù)統(tǒng)一資源標(biāo)識符(URI)或者是數(shù)據(jù)的MIME類型(多用途互聯(lián)網(wǎng)郵件擴(kuò)展),不同的動作伴隨著不同的數(shù)據(jù)規(guī)格。4)附加類別Category:一個包含關(guān)于應(yīng)該處理這個意圖的組件的附加信息的字符串。5)附加信息Extras:應(yīng)該遞交給意圖處理組件的附加信息鍵-值對(Map類型數(shù)據(jù)結(jié)構(gòu),主要用于數(shù)據(jù)傳遞)。6)標(biāo)識Flag:主要用于指示Android系統(tǒng)如何啟動一個Activity或者配置一些Activity行為(比如指示新Activity不要出現(xiàn)在最近啟動應(yīng)用程序的列表中)*什么是MIME?Intent對象ponent組件名稱Componentname:應(yīng)該處理這個意圖的組件名字,如果指定了此屬性,那么我們就成為此Intent是顯式的Intent,系統(tǒng)將啟動此名稱指定的組件;如果沒有指定組件名稱的Intent就是隱式意圖,系統(tǒng)通過過濾機(jī)制(通過匹配Action,Data和Category)來確定要啟動的組件;系統(tǒng)提供了多個Api使用多個方式來設(shè)置組件名稱:1)Intent構(gòu)造函數(shù)2)ponent()3)setClass()4)setClassName()Intent對象-Action動作Action:通過構(gòu)造函數(shù)或者setAction()方法可以設(shè)置意圖的Action屬性,此屬性實(shí)際上是一個字符串類型;系統(tǒng)有大量預(yù)定義的Action常量值,當(dāng)這些常量值不足以供應(yīng)用程序使用的時候,可以定義自己的Action常量;如果定義自己的Action,需要按照規(guī)范定義Action值:包名+Action名系統(tǒng)預(yù)定義的Action都有一定的含義:Intent對象-Data數(shù)據(jù)類型Data:其值是URI類型的值或者M(jìn)IME類型的值,或者兩者都指定,用于指定需要處理的數(shù)據(jù)類型,比如當(dāng)意圖包含ACTION_EDIT動作時,Data值就指示系統(tǒng)需要編輯的數(shù)據(jù)的實(shí)際類型;1)使用setData(Uri)設(shè)置數(shù)據(jù)類型2)使用setType(String)設(shè)置MIME類型3)使用setDataAndType(Uri,String)同時指定如何傳遞Data值的原則是盡可能幫助Android系統(tǒng)選擇合適的處理程序;*閱讀文檔時要注意細(xì)節(jié)說明,特別是注意點(diǎn),比如在此節(jié)的Google文檔中:*什么是URI?Intent對象-Data示例Intent對象-Category附加類別Category:一個包含應(yīng)處理Intent組件類型的附加信息的字符串。在一個Intent中可以包含任意多個Category值。Category值用于幫助系統(tǒng)選擇相應(yīng)Intent的目標(biāo)對象。1)使用addCategory(String)設(shè)置一個Category值系統(tǒng)預(yù)定義了很多Category值(閱讀參考手冊),比如下面兩個值:Intent對象-Extra附加數(shù)據(jù)Extra:Extra主要用于傳遞數(shù)據(jù),值采用key-value對的方式(Map類型數(shù)據(jù)結(jié)構(gòu)),使用下面的Api1)putExtra()加一個值2)putExtras()加一組值使用什么值是發(fā)送Intent的組件和接收Intent的對象共同決定的;Intent對象-Flag處理標(biāo)識Flag:用來指示系統(tǒng)如何啟動組件等各種行為。Flag都是系統(tǒng)預(yù)定義的。使用Api1)setFlags(int)設(shè)置標(biāo)識比如下面的Flag(完整列表查看系統(tǒng)參考手冊)Intent過濾器示例Intent解析意圖解析(只有隱式意圖需要解析):通過比較意圖對象的內(nèi)容和意圖過濾器來匹配該意圖的處理者。意圖過濾器公布一個組件具備的能力以及限定它能處理的意圖。如果一個組件沒有任何的意圖過濾器,那它只能接收顯式意圖。一個帶過濾器的組件可以同時接收顯式和隱式意圖。當(dāng)一個意圖對象被一個意圖過濾器測試時,只有三個方面會被參考到:動作(Action)數(shù)據(jù)(URI以及數(shù)據(jù)類型)類別(Category)Intent過濾器匹配在這個解析過程中,Android是通過Intent的action、type、category這三個屬性來進(jìn)行判斷的,判斷過程如下:

1)如果Intent指明了action,則目標(biāo)組件的IntentFilter的action列表中就必須包含有這個action,否則不能匹配;

2)如果Intent沒有提供type,系統(tǒng)將從data中得到數(shù)據(jù)類型。和action一樣,目標(biāo)組件的數(shù)據(jù)類型列表中必須包含Intent的數(shù)據(jù)類型,否則不能匹配。

3)如果Intent中的數(shù)據(jù)不是content:類型的URI,而且Intent也沒有明確指定它的type,將根據(jù)Intent中數(shù)據(jù)的scheme(比如http:或者mailto:)進(jìn)行匹配。同上,Intent的scheme必須出現(xiàn)在目標(biāo)組件的scheme列表中。

4)如果Intent指定了一個或多個category,這些類別必須全部出現(xiàn)在組件的類別列表中。比如Intent中包含了兩個類別:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目標(biāo)組件必須至少包含這兩個類別。Intent過濾器示例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é)院移動互聯(lián)應(yīng)用實(shí)驗(yàn)室ZUCCMobileInternetApplicationLab.Manifest文件系統(tǒng)如何確知一個應(yīng)用程序包含哪些Activity,Service等構(gòu)造塊?一個應(yīng)用程序的Activity構(gòu)造塊能響應(yīng)哪些意圖?一個應(yīng)用程序的需要怎樣的權(quán)限?……一個應(yīng)用程序的所有的構(gòu)造塊以及應(yīng)用程序應(yīng)該聲明的種種要素都是在一個xml文件中定義的,這就是Manifest文件,又被稱為清單文件.每個應(yīng)用程序的清單文件AndroidManifest.xml(一定是這個名字)在它的根目錄里。這個清單文件給Android系統(tǒng)提供了關(guān)于這個應(yīng)用程序的基本信息,系統(tǒng)在能運(yùn)行任何程序代碼之前必須知道這些信息。Manifest文件AndroidManifest.xml主要包含以下功能:命名應(yīng)用程序的Java包,這個包名用來唯一標(biāo)識應(yīng)用程序;描述應(yīng)用程序的組件-活動,服務(wù),廣播接收者,以及組成應(yīng)用程序的內(nèi)容提供者;決定應(yīng)用程序組件運(yùn)行在哪個進(jìn)程里面;聲明應(yīng)用程序所必須具備的權(quán)限,用以訪問受保護(hù)的部分API,以及和其它應(yīng)用程序交互;聲明應(yīng)用程序其他的必備權(quán)限,用以組件之間的交互;列舉測試設(shè)備Instrumentation類,用來提供應(yīng)用程序運(yùn)行時所需的環(huán)境配置及其他信息,這些聲明只在程序開發(fā)和測試階段存在,發(fā)布前將被刪除;聲明應(yīng)用程序所要求的AndroidAPI的最低版本級別;列舉application所需要鏈接的庫;課堂閱讀

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),即便清單文件中必須至少存在其中某些元素才能完成任何有意義的操作也是如此。如果一個元素包含某些內(nèi)容,也就包含其他元素。所有值均通過屬性進(jìn)行設(shè)置,而不是通過元素內(nèi)的字符數(shù)據(jù)設(shè)置。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論