




已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
組件通信和廣播消息,2,提綱,了解使用Intent進(jìn)行組件通信的原理 掌握使用Intent啟動(dòng)Activity的方法 掌握獲取Activity返回值的方法 了解Intent過(guò)濾器的原理與匹配機(jī)制 掌握發(fā)送和接收廣播消息的方法,3,Intent,Intent是一個(gè)動(dòng)作的完整描述,包含了動(dòng)作的產(chǎn)生組件、接收組件和傳遞的數(shù)據(jù)信息 Intent也可稱為一個(gè)在不同組件之間傳遞的消息,這個(gè)消息在到達(dá)接收組件后,接收組件會(huì)執(zhí)行相關(guān)的動(dòng)作 Intent為Activity、Service和BroadcastReceiver等組件提供交互能力 Intent的用途 啟動(dòng)Activity和Service 在Android系統(tǒng)上發(fā)布廣播消息 廣播消息可以是接收到特定數(shù)據(jù)或消息,也可以是手機(jī)的信號(hào)變化或電池的電量過(guò)低等信息,4,Intent,啟動(dòng)Activity 在Android系統(tǒng)中,應(yīng)用程序一般都有多個(gè)Activity,Intent可以實(shí)現(xiàn)不同Activity之間的切換和數(shù)據(jù)傳遞 啟動(dòng)Activity方式 顯式啟動(dòng):必須在Intent中指明啟動(dòng)的Activity所在的類 隱式啟動(dòng): Android系統(tǒng)根據(jù)Intent的動(dòng)作和數(shù)據(jù)來(lái)決定啟動(dòng)哪一個(gè)Activity,也就是說(shuō)在隱式啟動(dòng)時(shí),Intent中只包含需要執(zhí)行的動(dòng)作和所包含的數(shù)據(jù),而無(wú)需指明具體啟動(dòng)哪一個(gè)Activity,選擇權(quán)由Android系統(tǒng)和最終用戶來(lái)決定。,5,Intent,啟動(dòng)Activity 顯式啟動(dòng) 創(chuàng)建一個(gè)Intent 指定當(dāng)前的應(yīng)用程序上下文以及要啟動(dòng)的Activity 把創(chuàng)建好的這個(gè)Intent作為參數(shù)傳遞給startActivity()方法,6,Intent,啟動(dòng)Activity 顯式啟動(dòng) IntentDemo示例 IntentDemo示例包含兩個(gè)Activity類 IntentDemo ActivityToStart 程序啟動(dòng)是默認(rèn)啟動(dòng)IntentDemo這個(gè)Activity,7,Intent,啟動(dòng)Activity 顯式啟動(dòng) 在AndroidManifest.xml文件中注冊(cè)上面這兩個(gè)Activity,應(yīng)使用標(biāo)簽,嵌套在標(biāo)簽內(nèi)部,8,Intent,啟動(dòng)Activity 顯式啟動(dòng) 在IntentDemo.java文件中,包含了顯式使用Intent啟動(dòng)Activity的核心代碼 在點(diǎn)擊事件的處理函數(shù)中,Intent構(gòu)造函數(shù)的第1個(gè)參數(shù)是應(yīng)用程序上下文,程序中的應(yīng)用程序上下文就是IntentDemo;第2個(gè)參數(shù)是接收Intent的目標(biāo)組件,使用的是顯式啟動(dòng)方式,直接指明了需要啟動(dòng)的Activity,9,Intent,啟動(dòng)Activity 隱式啟動(dòng) 優(yōu)點(diǎn):不需要指明需要啟動(dòng)哪一個(gè)Activity,而由Android系統(tǒng)來(lái)決定,有利于使用第三方組件 隱式啟動(dòng)Activity時(shí),Android系統(tǒng)在應(yīng)用程序運(yùn)行時(shí)解析Intent,并根據(jù)一定的規(guī)則對(duì)Intent和Activity進(jìn)行匹配,使Intent上的動(dòng)作、數(shù)據(jù)與Activity完全吻合 匹配的Activity可以是應(yīng)用程序本身的,也可以是Android系統(tǒng)內(nèi)置的,還可以是第三方應(yīng)用程序提供的。因此,這種方式更加強(qiáng)調(diào)了Android應(yīng)用程序中組件的可復(fù)用性,10,Intent,啟動(dòng)Activity 隱式啟動(dòng) Intent的語(yǔ)法如下 Intent構(gòu)造函數(shù)的第1個(gè)參數(shù)是Intent需要執(zhí)行的動(dòng)作 第2個(gè)參數(shù)是URI,表示需要傳遞的數(shù)據(jù),11,Intent,啟動(dòng)Activity 隱式啟動(dòng) Android系統(tǒng)支持的常見(jiàn)動(dòng)作字符串常量表,12,Intent,啟動(dòng)Activity 隱式啟動(dòng) IntentDemo2示例說(shuō)明如何隱式啟動(dòng)Activity,Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“http:“); startActivity(intent);,13,Intent,獲取Activity返回值 在IntentDemo示例中,通過(guò)使用startActivity(Intent)方法啟動(dòng)Activity后,啟動(dòng)后的兩個(gè)Activity之間相互獨(dú)立,沒(méi)有任何的關(guān)聯(lián) 在很多情況下,后啟動(dòng)的Activity是為了讓用戶對(duì)特定信息進(jìn)行選擇,在關(guān)閉這個(gè)Activity后,用戶的選擇信息需要返回給未關(guān)閉的那個(gè)Activity 按照Activity啟動(dòng)的先后順序,先啟動(dòng)的稱為父Activity,后啟動(dòng)的稱為子Activity 如果需要將子Activity的部分信息返回給父Activity,則可以使用Sub-Activity的方式去啟動(dòng)子Activity,14,Intent,獲取Activity返回值 獲取子Activity的返回值,一般可以分為以下三個(gè)步驟 以Sub-Activity的方式啟動(dòng)子Activity 設(shè)置子Activity的返回值 在父Activity中獲取返回值,15,Intent,獲取Activity返回值 以Sub-Activity的方式啟動(dòng)子Activity 調(diào)用startActivityForResult(Intent, requestCode)函數(shù) 參數(shù)Intent用于決定啟動(dòng)哪個(gè)Activity 參數(shù)requestCode是唯一的標(biāo)識(shí)子Activity的請(qǐng)求碼 顯式啟動(dòng)子Activity的代碼如下 隱式啟動(dòng)子Activity的代碼如下,16,Intent,獲取Activity返回值 設(shè)置子Activity的返回值 在子Activity調(diào)用finish()函數(shù)關(guān)閉前,調(diào)用setResult()函數(shù)將所需的數(shù)據(jù)返回給父Activity setResult()函數(shù)有兩個(gè)參數(shù) 結(jié)果碼 返回值,17,Intent,獲取Activity返回值 設(shè)置子Activity的返回值 結(jié)果碼表明了子Activity的返回狀態(tài),通常為Activity.RESULT_OK或者Activity.RESULT_CANCELED,或自定義的結(jié)果碼,結(jié)果碼均為整數(shù)類型 返回值用封裝在Intent中,子Activity通過(guò)Intent將需要返回的數(shù)據(jù)傳遞給父Activity。數(shù)據(jù)主要是Uri形式,可以附加一些額外信息,這些額外信息用Extra的集合表示 下面代碼說(shuō)明如何在子Activity中設(shè)置返回值,18,Intent,獲取Activity返回值 在父Activity中獲取返回值 當(dāng)子Activity關(guān)閉時(shí),啟動(dòng)它的父Activity的onActivityResult()函數(shù)將被調(diào)用;如果需要在父Activity中處理子Activity的返回值,則重載此函數(shù)即可 此函數(shù)的語(yǔ)法如下 第1個(gè)參數(shù)requestCode,用來(lái)表示是哪一個(gè)子Activity的返回值 第2個(gè)參數(shù)resultCode用于表示子Activity的返回狀態(tài) 第3個(gè)參數(shù)data是子Activity的返回?cái)?shù)據(jù),返回?cái)?shù)據(jù)類型是Intent。根據(jù)返回?cái)?shù)據(jù)的用途不同,Uri數(shù)據(jù)的協(xié)議則不同,也可以使用Extra方法返回一些原始類型的數(shù)據(jù),19,Intent,獲取Activity返回值 IntentDemo示例說(shuō)明了如何以Sub-Activity方式啟動(dòng)子Activity,以及使用Intent進(jìn)行組件間通信,20,Intent,獲取Activity返回值 當(dāng)用戶點(diǎn)擊“Press me!”和“Go to third”按鈕時(shí),程序?qū)⒎謩e啟動(dòng)子SecondActivity和ThirdActivity,21,Intent過(guò)濾器,Intent過(guò)濾器 Intent過(guò)濾器是一種根據(jù)Intent中的動(dòng)作(Action)、類別(Category)和數(shù)據(jù)(Data)等內(nèi)容,對(duì)適合接收該Intent的組件進(jìn)行匹配和篩選的機(jī)制 Intent過(guò)濾器可以匹配數(shù)據(jù)類型、路徑和協(xié)議,還包括可以用來(lái)確定多個(gè)匹配項(xiàng)順序的優(yōu)先級(jí)(Priority) 應(yīng)用程序的Activity組件、Service組件和BroadcastReceiver都可以注冊(cè)Intent過(guò)濾器,則這些組件在特定的數(shù)據(jù)格式上就可以產(chǎn)生相應(yīng)的動(dòng)作,22,Intent過(guò)濾器,注冊(cè)Intent過(guò)濾器 在AndroidManifest.xml文件的各個(gè)組件的節(jié)點(diǎn)下定義節(jié)點(diǎn),然后在節(jié)點(diǎn)中聲明該組件所支持的動(dòng)作、執(zhí)行的環(huán)境和數(shù)據(jù)格式等信息 在程序代碼中動(dòng)態(tài)地為組件設(shè)置Intent過(guò)濾器 節(jié)點(diǎn)支持標(biāo)簽、標(biāo)簽和標(biāo)簽 標(biāo)簽定義Intent過(guò)濾器的“動(dòng)作” 標(biāo)簽定義Intent過(guò)濾器的“類別” 標(biāo)簽定義Intent過(guò)濾器的“數(shù)據(jù)”,23,Intent過(guò)濾器,注冊(cè)Intent過(guò)濾器 節(jié)點(diǎn)支持的標(biāo)簽和屬性 標(biāo)簽用來(lái)指定Intent過(guò)濾器的服務(wù)方式,每個(gè)Intent過(guò)濾器可以定義多個(gè)標(biāo)簽,程序開發(fā)人員可使用自定義的類別,或使用Android系統(tǒng)提供的類別,24,Intent過(guò)濾器,注冊(cè)Intent過(guò)濾器 Android系統(tǒng)提供的類別 AndroidManifest.xml文件中的每個(gè)組件的都被解析成一個(gè)Intent過(guò)濾器對(duì)象。當(dāng)應(yīng)用程序安裝到Android系統(tǒng)時(shí),所有的組件和Intent過(guò)濾器都會(huì)注冊(cè)到Android系統(tǒng)中。這樣,Android系統(tǒng)便知道了如何將任意一個(gè)Intent請(qǐng)求通過(guò)Intent過(guò)濾器映射到相應(yīng)的組件上,25,Intent過(guò)濾器,26,Intent過(guò)濾器,Intent解析 Intent到Intent過(guò)濾器的映射過(guò)程稱為“Intent解析” Intent解析可以在所有的組件中,找到一個(gè)可以與請(qǐng)求的Intent達(dá)成最佳匹配的Intent過(guò)濾器 Intent解析的匹配規(guī)則 Android系統(tǒng)把所有應(yīng)用程序包中的Intent過(guò)濾器集合在一起,形成一個(gè)完整的Intent過(guò)濾器列表 在Intent與Intent過(guò)濾器進(jìn)行匹配時(shí),Android系統(tǒng)會(huì)將列表中所有Intent過(guò)濾器的“動(dòng)作”和“類別”與Intent進(jìn)行匹配,任何不匹配的Intent過(guò)濾器都將被過(guò)濾掉。沒(méi)有指定“動(dòng)作”的Intent過(guò)濾器可以匹配任何的Intent,但是沒(méi)有指定“類別”的Intent過(guò)濾器只能匹配沒(méi)有“類別”的Intent,27,Intent過(guò)濾器,Intent解析 把Intent數(shù)據(jù)Uri的每個(gè)子部與Intent過(guò)濾器的標(biāo)簽中的屬性進(jìn)行匹配,如果標(biāo)簽指定了協(xié)議、主機(jī)名、路徑名或MIME類型,那么這些屬性都要與Intent的Uri數(shù)據(jù)部分進(jìn)行匹配,任何不匹配的Intent過(guò)濾器均被過(guò)濾掉 如果Intent過(guò)濾器的匹配結(jié)果多于一個(gè),則可以根據(jù)在標(biāo)簽中定義的優(yōu)先級(jí)標(biāo)簽來(lái)對(duì)Intent過(guò)濾器進(jìn)行排序,優(yōu)先級(jí)最高的Intent過(guò)濾器將被選擇,在ToDoList3的基礎(chǔ)上,專門有一個(gè)活動(dòng)來(lái)管理新輸入項(xiàng),并增加編輯功能 參見(jiàn)項(xiàng)目源碼,Intent-ToDoList6,綜合ToDoList5、TodoList6,實(shí)現(xiàn)新的TodoList工程,包括多個(gè)Activity、UI狀態(tài)的保存,待辦事項(xiàng)的存儲(chǔ)等功能。,練習(xí),30,廣播消息,廣播消息 Intent的另一種用途是發(fā)送廣播消息 應(yīng)用程序和Android系統(tǒng)都可以使用Intent發(fā)送廣播消息 廣播消息的內(nèi)容可以與應(yīng)用程序密切相關(guān)的數(shù)據(jù)信息,也可以Android的系統(tǒng)信息,例如網(wǎng)絡(luò)連接變化、電池電量變化、接收到短信和系統(tǒng)設(shè)置變化等等 如果應(yīng)用程序注冊(cè)了BroadcastReceiver,則可以接收到指定的廣播消息,31,廣播消息,廣播信息的使用方法 創(chuàng)建一個(gè)Intent 注意:在構(gòu)造Intent時(shí)必須用一個(gè)全局唯一的字符串標(biāo)識(shí)其要執(zhí)行的動(dòng)作,通常使用應(yīng)用程序包的名稱 調(diào)用sendBroadcast()函數(shù),就可把Intent攜帶的消息廣播出去 如果要在Intent傳遞額外數(shù)據(jù),可以用Intent的putExtra()方法,32,廣播消息,利用Intent發(fā)送廣播消息,并添加了額外的數(shù)據(jù),然后調(diào)用sendBroadcast()發(fā)生了廣播消息的代碼,33,廣播消息,BroadcastReceiver BroadcastReceiver用于監(jiān)聽廣播消息 可以在AndroidManifest.xml文件或在代碼中注冊(cè)一個(gè)BroadcastReceiver,并在其中使用Intent 過(guò)濾器指定要處理的廣播消息 創(chuàng)建BroadcastReceiver需繼承BroadcastReceiver類,并重載onReceive()方法。代碼如下,34,廣播消息,BroadcastReceiver的應(yīng)用程序不需要一直運(yùn)行,當(dāng)Android系統(tǒng)接收到與之匹配的廣播消息時(shí),會(huì)自動(dòng)啟動(dòng)此BroadcastReceiver 基于以上的特征,BroadcastReceiver適合做一些資源管理的工作 在BroadcastReceiver接收到與之匹配的廣播消息后,onReceive()方法會(huì)被調(diào)用 onReceive()方法必須要在5秒鐘執(zhí)行完畢,否則Android系統(tǒng)會(huì)認(rèn)為該組件失去響應(yīng),并提示用戶強(qiáng)行關(guān)閉該組件,35,廣播消息,BroadcastDemo示例說(shuō)明了如何在應(yīng)用程序中注冊(cè)BroadcastReceiver,并接收指定類型的廣播消息 在點(diǎn)擊“發(fā)送”按鈕后,EditText控件中內(nèi)容將以廣播消息的形式發(fā)送出去, 示例內(nèi)部的BroadcastReceiver將接收這個(gè)廣播消息,并顯示在用戶界面的下方,36,廣播消息,BroadcastDemo.java文件中包含發(fā)送廣播消息的代碼,其關(guān)鍵代碼如下 第3行代碼創(chuàng)建Intent,將com.example.BroadcastDemo作為識(shí)別廣播消息的字符串標(biāo)識(shí) 第4行代碼添加了額外信
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司視頻腳本策劃方案
- 公司美食類活動(dòng)方案
- 公司水果采摘活動(dòng)方案
- 公司植樹掛牌活動(dòng)方案
- 公司深圳灣公園活動(dòng)方案
- 公司組織騎單車活動(dòng)方案
- 公司旅游業(yè)余活動(dòng)方案
- 公司羽毛球例行活動(dòng)方案
- 公司溫泉團(tuán)建策劃方案
- 公司線上周年慶活動(dòng)方案
- 消毒規(guī)范課件教學(xué)課件
- 生態(tài)養(yǎng)殖羊圈施工合同
- 撤并小學(xué)資產(chǎn)移交方案
- 手繪玻璃杯創(chuàng)意課程設(shè)計(jì)
- 傳感器的種類課件
- 2023年國(guó)網(wǎng)山西省電力公司提前批招聘考試真題
- 《珍愛(ài)生命拒絕毒品》主題班會(huì)課件
- 墻布窗簾購(gòu)銷合同協(xié)議書
- 計(jì)算機(jī)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu) 教學(xué)課件
- 華為質(zhì)量回溯(根因分析與糾正預(yù)防措施)模板
- 山東省煙臺(tái)市牟平區(qū)(五四制)2023-2024學(xué)年八年級(jí)下學(xué)期期末語(yǔ)文試題(原卷版)
評(píng)論
0/150
提交評(píng)論