




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
組件通信和廣播消息,2,提綱,了解使用Intent進行組件通信的原理 掌握使用Intent啟動Activity的方法 掌握獲取Activity返回值的方法 了解Intent過濾器的原理與匹配機制 掌握發(fā)送和接收廣播消息的方法,3,Intent,Intent是一個動作的完整描述,包含了動作的產(chǎn)生組件、接收組件和傳遞的數(shù)據(jù)信息 Intent也可稱為一個在不同組件之間傳遞的消息,這個消息在到達接收組件后,接收組件會執(zhí)行相關的動作 Intent為Activity、Service和BroadcastReceiver等組件提供交互能力 Intent的用途 啟動Activity和Service 在Android系統(tǒng)上發(fā)布廣播消息 廣播消息可以是接收到特定數(shù)據(jù)或消息,也可以是手機的信號變化或電池的電量過低等信息,4,Intent,啟動Activity 在Android系統(tǒng)中,應用程序一般都有多個Activity,Intent可以實現(xiàn)不同Activity之間的切換和數(shù)據(jù)傳遞 啟動Activity方式 顯式啟動:必須在Intent中指明啟動的Activity所在的類 隱式啟動: Android系統(tǒng)根據(jù)Intent的動作和數(shù)據(jù)來決定啟動哪一個Activity,也就是說在隱式啟動時,Intent中只包含需要執(zhí)行的動作和所包含的數(shù)據(jù),而無需指明具體啟動哪一個Activity,選擇權(quán)由Android系統(tǒng)和最終用戶來決定。,5,Intent,啟動Activity 顯式啟動 創(chuàng)建一個Intent 指定當前的應用程序上下文以及要啟動的Activity 把創(chuàng)建好的這個Intent作為參數(shù)傳遞給startActivity()方法,6,Intent,啟動Activity 顯式啟動 IntentDemo示例 IntentDemo示例包含兩個Activity類 IntentDemo ActivityToStart 程序啟動是默認啟動IntentDemo這個Activity,7,Intent,啟動Activity 顯式啟動 在AndroidManifest.xml文件中注冊上面這兩個Activity,應使用標簽,嵌套在標簽內(nèi)部,8,Intent,啟動Activity 顯式啟動 在IntentDemo.java文件中,包含了顯式使用Intent啟動Activity的核心代碼 在點擊事件的處理函數(shù)中,Intent構(gòu)造函數(shù)的第1個參數(shù)是應用程序上下文,程序中的應用程序上下文就是IntentDemo;第2個參數(shù)是接收Intent的目標組件,使用的是顯式啟動方式,直接指明了需要啟動的Activity,9,Intent,啟動Activity 隱式啟動 優(yōu)點:不需要指明需要啟動哪一個Activity,而由Android系統(tǒng)來決定,有利于使用第三方組件 隱式啟動Activity時,Android系統(tǒng)在應用程序運行時解析Intent,并根據(jù)一定的規(guī)則對Intent和Activity進行匹配,使Intent上的動作、數(shù)據(jù)與Activity完全吻合 匹配的Activity可以是應用程序本身的,也可以是Android系統(tǒng)內(nèi)置的,還可以是第三方應用程序提供的。因此,這種方式更加強調(diào)了Android應用程序中組件的可復用性,10,Intent,啟動Activity 隱式啟動 Intent的語法如下 Intent構(gòu)造函數(shù)的第1個參數(shù)是Intent需要執(zhí)行的動作 第2個參數(shù)是URI,表示需要傳遞的數(shù)據(jù),11,Intent,啟動Activity 隱式啟動 Android系統(tǒng)支持的常見動作字符串常量表,12,Intent,啟動Activity 隱式啟動 IntentDemo2示例說明如何隱式啟動Activity,Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“http:“); startActivity(intent);,13,Intent,獲取Activity返回值 在IntentDemo示例中,通過使用startActivity(Intent)方法啟動Activity后,啟動后的兩個Activity之間相互獨立,沒有任何的關聯(lián) 在很多情況下,后啟動的Activity是為了讓用戶對特定信息進行選擇,在關閉這個Activity后,用戶的選擇信息需要返回給未關閉的那個Activity 按照Activity啟動的先后順序,先啟動的稱為父Activity,后啟動的稱為子Activity 如果需要將子Activity的部分信息返回給父Activity,則可以使用Sub-Activity的方式去啟動子Activity,14,Intent,獲取Activity返回值 獲取子Activity的返回值,一般可以分為以下三個步驟 以Sub-Activity的方式啟動子Activity 設置子Activity的返回值 在父Activity中獲取返回值,15,Intent,獲取Activity返回值 以Sub-Activity的方式啟動子Activity 調(diào)用startActivityForResult(Intent, requestCode)函數(shù) 參數(shù)Intent用于決定啟動哪個Activity 參數(shù)requestCode是唯一的標識子Activity的請求碼 顯式啟動子Activity的代碼如下 隱式啟動子Activity的代碼如下,16,Intent,獲取Activity返回值 設置子Activity的返回值 在子Activity調(diào)用finish()函數(shù)關閉前,調(diào)用setResult()函數(shù)將所需的數(shù)據(jù)返回給父Activity setResult()函數(shù)有兩個參數(shù) 結(jié)果碼 返回值,17,Intent,獲取Activity返回值 設置子Activity的返回值 結(jié)果碼表明了子Activity的返回狀態(tài),通常為Activity.RESULT_OK或者Activity.RESULT_CANCELED,或自定義的結(jié)果碼,結(jié)果碼均為整數(shù)類型 返回值用封裝在Intent中,子Activity通過Intent將需要返回的數(shù)據(jù)傳遞給父Activity。數(shù)據(jù)主要是Uri形式,可以附加一些額外信息,這些額外信息用Extra的集合表示 下面代碼說明如何在子Activity中設置返回值,18,Intent,獲取Activity返回值 在父Activity中獲取返回值 當子Activity關閉時,啟動它的父Activity的onActivityResult()函數(shù)將被調(diào)用;如果需要在父Activity中處理子Activity的返回值,則重載此函數(shù)即可 此函數(shù)的語法如下 第1個參數(shù)requestCode,用來表示是哪一個子Activity的返回值 第2個參數(shù)resultCode用于表示子Activity的返回狀態(tài) 第3個參數(shù)data是子Activity的返回數(shù)據(jù),返回數(shù)據(jù)類型是Intent。根據(jù)返回數(shù)據(jù)的用途不同,Uri數(shù)據(jù)的協(xié)議則不同,也可以使用Extra方法返回一些原始類型的數(shù)據(jù),19,Intent,獲取Activity返回值 IntentDemo示例說明了如何以Sub-Activity方式啟動子Activity,以及使用Intent進行組件間通信,20,Intent,獲取Activity返回值 當用戶點擊“Press me!”和“Go to third”按鈕時,程序?qū)⒎謩e啟動子SecondActivity和ThirdActivity,21,Intent過濾器,Intent過濾器 Intent過濾器是一種根據(jù)Intent中的動作(Action)、類別(Category)和數(shù)據(jù)(Data)等內(nèi)容,對適合接收該Intent的組件進行匹配和篩選的機制 Intent過濾器可以匹配數(shù)據(jù)類型、路徑和協(xié)議,還包括可以用來確定多個匹配項順序的優(yōu)先級(Priority) 應用程序的Activity組件、Service組件和BroadcastReceiver都可以注冊Intent過濾器,則這些組件在特定的數(shù)據(jù)格式上就可以產(chǎn)生相應的動作,22,Intent過濾器,注冊Intent過濾器 在AndroidManifest.xml文件的各個組件的節(jié)點下定義節(jié)點,然后在節(jié)點中聲明該組件所支持的動作、執(zhí)行的環(huán)境和數(shù)據(jù)格式等信息 在程序代碼中動態(tài)地為組件設置Intent過濾器 節(jié)點支持標簽、標簽和標簽 標簽定義Intent過濾器的“動作” 標簽定義Intent過濾器的“類別” 標簽定義Intent過濾器的“數(shù)據(jù)”,23,Intent過濾器,注冊Intent過濾器 節(jié)點支持的標簽和屬性 標簽用來指定Intent過濾器的服務方式,每個Intent過濾器可以定義多個標簽,程序開發(fā)人員可使用自定義的類別,或使用Android系統(tǒng)提供的類別,24,Intent過濾器,注冊Intent過濾器 Android系統(tǒng)提供的類別 AndroidManifest.xml文件中的每個組件的都被解析成一個Intent過濾器對象。當應用程序安裝到Android系統(tǒng)時,所有的組件和Intent過濾器都會注冊到Android系統(tǒng)中。這樣,Android系統(tǒng)便知道了如何將任意一個Intent請求通過Intent過濾器映射到相應的組件上,25,Intent過濾器,26,Intent過濾器,Intent解析 Intent到Intent過濾器的映射過程稱為“Intent解析” Intent解析可以在所有的組件中,找到一個可以與請求的Intent達成最佳匹配的Intent過濾器 Intent解析的匹配規(guī)則 Android系統(tǒng)把所有應用程序包中的Intent過濾器集合在一起,形成一個完整的Intent過濾器列表 在Intent與Intent過濾器進行匹配時,Android系統(tǒng)會將列表中所有Intent過濾器的“動作”和“類別”與Intent進行匹配,任何不匹配的Intent過濾器都將被過濾掉。沒有指定“動作”的Intent過濾器可以匹配任何的Intent,但是沒有指定“類別”的Intent過濾器只能匹配沒有“類別”的Intent,27,Intent過濾器,Intent解析 把Intent數(shù)據(jù)Uri的每個子部與Intent過濾器的標簽中的屬性進行匹配,如果標簽指定了協(xié)議、主機名、路徑名或MIME類型,那么這些屬性都要與Intent的Uri數(shù)據(jù)部分進行匹配,任何不匹配的Intent過濾器均被過濾掉 如果Intent過濾器的匹配結(jié)果多于一個,則可以根據(jù)在標簽中定義的優(yōu)先級標簽來對Intent過濾器進行排序,優(yōu)先級最高的Intent過濾器將被選擇,在ToDoList3的基礎上,專門有一個活動來管理新輸入項,并增加編輯功能 參見項目源碼,Intent-ToDoList6,綜合ToDoList5、TodoList6,實現(xiàn)新的TodoList工程,包括多個Activity、UI狀態(tài)的保存,待辦事項的存儲等功能。,練習,30,廣播消息,廣播消息 Intent的另一種用途是發(fā)送廣播消息 應用程序和Android系統(tǒng)都可以使用Intent發(fā)送廣播消息 廣播消息的內(nèi)容可以與應用程序密切相關的數(shù)據(jù)信息,也可以Android的系統(tǒng)信息,例如網(wǎng)絡連接變化、電池電量變化、接收到短信和系統(tǒng)設置變化等等 如果應用程序注冊了BroadcastReceiver,則可以接收到指定的廣播消息,31,廣播消息,廣播信息的使用方法 創(chuàng)建一個Intent 注意:在構(gòu)造Intent時必須用一個全局唯一的字符串標識其要執(zhí)行的動作,通常使用應用程序包的名稱 調(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文件或在代碼中注冊一個BroadcastReceiver,并在其中使用Intent 過濾器指定要處理的廣播消息 創(chuàng)建BroadcastReceiver需繼承BroadcastReceiver類,并重載onReceive()方法。代碼如下,34,廣播消息,BroadcastReceiver的應用程序不需要一直運行,當Android系統(tǒng)接收到與之匹配的廣播消息時,會自動啟動此BroadcastReceiver 基于以上的特征,BroadcastReceiver適合做一些資源管理的工作 在BroadcastReceiver接收到與之匹配的廣播消息后,onReceive()方法會被調(diào)用 onReceive()方法必須要在5秒鐘執(zhí)行完畢,否則Android系統(tǒng)會認為該組件失去響應,并提示用戶強行關閉該組件,35,廣播消息,BroadcastDemo示例說明了如何在應用程序中注冊BroadcastReceiver,并接收指定類型的廣播消息 在點擊“發(fā)送”按鈕后,EditText控件中內(nèi)容將以廣播消息的形式發(fā)送出去, 示例內(nèi)部的BroadcastReceiver將接收這個廣播消息,并顯示在用戶界面的下方,36,廣播消息,BroadcastDemo.java文件中包含發(fā)送廣播消息的代碼,其關鍵代碼如下 第3行代碼創(chuàng)建Intent,將com.example.BroadcastDemo作為識別廣播消息的字符串標識 第4行代碼添加了額外信
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天復合材料 課件 知識點2 納米復合材料
- 中國煙草培訓
- 2025年中國拋光塊行業(yè)市場全景分析及前景機遇研判報告
- 醉酒窒息死亡病例分析
- 中班健康領域:會變暖的衣服
- 綜合格斗培訓
- 腫瘤登記質(zhì)量控制
- 有限空間培訓
- 中小學生中醫(yī)藥與健康
- 羊腹瀉疾病的預防和治療
- 傳感器的種類課件
- 2023年國網(wǎng)山西省電力公司提前批招聘考試真題
- 《珍愛生命拒絕毒品》主題班會課件
- 墻布窗簾購銷合同協(xié)議書
- 計算機網(wǎng)絡的拓撲結(jié)構(gòu) 教學課件
- 華為質(zhì)量回溯(根因分析與糾正預防措施)模板
- 山東省煙臺市牟平區(qū)(五四制)2023-2024學年八年級下學期期末語文試題(原卷版)
- 廣東省廣州市荔灣區(qū)統(tǒng)考2023-2024學年英語八下期末統(tǒng)考試題含答案
- 綜合英語4智慧樹知到答案2024年江西師范大學
- 《山區(qū)公路橋梁典型病害手冊(試行)》
- 第四單元 神州音韻(四)-在那遙遠的地方 教案 -2023-2024學年人教版初中音樂八年級下冊
評論
0/150
提交評論