440 likes | 750 Views
Intent. 鄧姚文 http://www.ywdeng.idv.tw. 什麼是 Intent ?. 意圖 『 預計要進行的動作 』 的抽象描述 以 startActivity 啟動一個 Activity 以 broadcastIntent 將資訊廣播給一群 BroadcastReceiver 以 startService (Intent) 或 bindService (Intent, ServiceConnection , int ) 和背景的 Service 溝通. Intent 的屬性. Component Name 欲啟動的對象的名稱
E N D
Intent 鄧姚文 http://www.ywdeng.idv.tw
什麼是 Intent? • 意圖 • 『預計要進行的動作』的抽象描述 • 以 startActivity啟動一個Activity • 以broadcastIntent將資訊廣播給一群BroadcastReceiver • 以startService(Intent)或bindService(Intent, ServiceConnection, int)和背景的Service溝通
Intent 的屬性 Component Name 欲啟動的對象的名稱 Action 欲採取的動作 Data 資料 Category 分類 Extras 額外資訊,鍵值對 Flags 旗標
Intent 主要屬性 • Action 一般常見的動作 • ACTION_VIEW • ACTION_EDIT • ACTION_MAIN • Data 資料 • 動作所需的資料 • 以Uri表示 • 例如:聯絡簿資料庫
Example Action/Data Pairs • ACTION_VIEW • content://contacts/people/1 • 顯示識別碼為 1 的聯絡人資訊 • ACTION_DIAL • content://contacts/people/1 • 以撥號程式顯示聯絡人的電話號碼 • ACTION_VIEW • tel:123 • 以撥號程式顯示電話號碼 123 • ACTION_DIAL • tel:123 • 以撥號程式顯示電話號碼 123 • ACTION_EDIT • content://contacts/people/1 • 編輯識別碼為 1 的聯絡人資訊 • ACTION_VIEW • content://contacts/people/ • 列出聯絡人清單
Intent 次要屬性 • Category • Action 的額外資訊 • CATEGORY_LAUNCHER應用程式的頂層,出現在程式列之中 • CATEGORY_ALTERNATIVE資料的替代動作,使用者可以選擇 • Type • 資料的 MIME 類型 • Component • 標示動作對象的元件名稱 • Extras • 額外資訊的Bundle • 鍵值對 Key-Value Pairs
Examples • ACTION_MAIN with category CATEGORY_HOME • 主畫面 • ACTION_GET_CONTENT with MIME type vnd.android.cursor.item/phone • 列出聯絡人清單,供使用者瀏覽選取 • ACTION_GET_CONTENT with MIME type */* and category CATEGORY_OPENABLE • 列出可以用ContentResolver.openInputStream()顯示的資料,供使用者瀏覽選取
Intent Resolution 解析法 • Explicit Intents 明確 • 以setComponent(ComponentName)或setClass(Context, Class)設定元件或類別的名稱 • 通常不設定其他資訊 • Implicit Intents 隱含 • 不明確標示動作對象 • 必須提供許多次要屬性,讓系統足以辨識作用對象
利用 Intent 切換畫面 startActivity(Intent intent) ActivityA ActivityB • Intent 維繫多個 Activity 之間的關係 • Android 的每一個 Activity 都有一個畫面 • 需要切換畫面時,從 ActivityA 透過 Intent 切換到 ActivityB • 利用 Intent 把資料從 ActivityA 傳遞到 ActivityB
Intent 基本用法 // 從 ActivityA啟動 ActivityB … Intent intent = new Intent(); intent.setClass(ActivityA.this, ActivityB.class); startActivity(intent); …
練習:ImageViewer • 從教材網站下載 cats.7z,解開壓縮檔,有四張貓照片 • 製作四個Activity,每一個Activity之中包含 • 一個ImageViewer,裡頭嵌一張圖片; • 一個按鈕,點擊按鈕後換到下一頁 • 一個按鈕,點擊按鈕後換到上一頁
以 Toast 顯示訊息 • Toast 土司麵包 • 烤麵包機:土司麵包烤好了會自動彈出來 • Toast 在畫面下方彈出一個訊息,過一段時間之後自動消失 • static ToastmakeText(Contextcontext, intresId, int duration) • static ToastmakeText(Contextcontext, CharSequence text, int duration) • duration 時間長度 • Toast.LENGTH_LONG比較長的時間 • Toast.LENGTH_SHORT比較短的時間 • toast.show() 顯示訊息
練習:ImageViewer 已經是第一頁了還按『上一頁』 已經是第四頁了還按『下一頁』
透過 Intent 傳遞資料 • android.os.Bundle是鍵值對(Key-Value Pair)的集合 • 存取 Intent 的 Extra 屬性 • intent.putExtra(key, value); • Bundle bundle = intent.getExtras(); • String value = bundle.getString(key);
Activity 的 startActivityForResult() • 啟動一個 Activity 然後在它結束之後取得回傳的資料 • startActivityForResult (Intentintent, intrequestCode) • startActivityFromChild (Activity child, Intentintent, intrequestCode) • Activity 設定回傳資料的方式: • setResult (intresultCode) • setResult (intresultCode, Intent data) • Activity 以 finish() 結束
練習:SayHello雙畫面版 • 請教使用者的姓名與性別,然後向使用者問好,加上姓名與稱謂 • 男性稱謂為『先生』 • 女性稱謂為『小姐』 • 兩個 Activity • Prompt 提供輸入姓名與性別的畫面 • Main 輸出打招呼的訊息
練習:SayHello雙畫面版 • Main 是程式進入點 • 以 startActivityForResult啟動 Prompt • Prompt 提供畫面給使用者輸入姓名與性別 • 姓名輸入界面為 EditText • 性別輸入界面為 RadioButton • 以 RadioGroup包住一組 RadioButton形成單選題 • 以 getCheckedRadioButtonId() 取得被點選的項目 • 以 check(intradioButtonId) 設定被點選的項目 • 檢查是否確實輸入姓名 • 透過 Intent 將姓名與稱謂回傳給 Main
練習:SayHello雙畫面版輸入小姐姓名 Prompt Main
練習:SayHello雙畫面版輸入先生姓名 Prompt Main
練習:SayHello雙畫面版沒有輸入姓名按『確定』練習:SayHello雙畫面版沒有輸入姓名按『確定』 以 Toast 顯示『請確實輸入您的姓名!』