android intent

68
Android Intent 建建建建建建 建建建 建建建 2011/1

Upload: zocha

Post on 20-Mar-2016

105 views

Category:

Documents


3 download

DESCRIPTION

Android Intent. 建國科技大學 資管系 饒瑞佶 2011/1. Android Intent (I). Android 的事件處理機制稱為「 Intent 」 Intent 的作用與事件 (event) 很像,但與傳統的事件處理仍然有些差異 傳統的事件 處理,講求的是「處理者( handler )的觸發」,當一事件發生時,便 callback 事件的處理者,或是直接將該事件 forward 給應用程式,由應用程式處理 - PowerPoint PPT Presentation

TRANSCRIPT

Page 2: Android Intent

Android Intent (I)• Android 的事件處理機制稱為「 Intent 」• Intent 的作用與事件 (event) 很像,但與傳統的事件處理仍然有些差異• 傳統的事件處理,講求的是「處理者( handler )的觸發」,當一事件發生時,便 callback 事件的處理者,或是直接將該事件 forward 給應用程式,由應用程式處理• 在 Intent 裡, Android 將事件看成「應用程式的意圖」或「使用者的意圖」,並去解釋該意圖的目的,若

Android 系統本身能理解應用程式的意圖,便會「自行」去處理該意圖所應執行的工作

Page 3: Android Intent

Android Intent (II)• Android 的做法是讓每個 Intent 都帶有一個 action ,並根據不同的 action 去進行需要的處理• Android 內 部 有 許 多 內 建 的 action , 例 如「 ACTION_VIEW 」 , 用 來 「 檢 視 」 (view) 一 個「 URI 」資料,當 Android 看到「 ACTION_VIEW 」時,便「自行」依據資料 (data) 處理 (action) 該 Intent ,處理的方式隨 data 不同而不同• Intent intent=new Intent(action,data)• data 範例

– http:// 開啟瀏覽器– geo: 開啟 Google Maps– tel: 撥電話

Page 4: Android Intent

Android Intent (III)• Android 內建的 Intent action 分為二種:

1. Activity Action: 啟動 Activity 的 action2. Broadcast Action: 透過廣撥器處理的 action

• 另外,可自行定義一個 Intent ,設定可接收此 Intent 的 Service( 這就是 Action) ,並透過「送出Intent 」的方式,請 Android 啟動該 Service

• 除了 action 外, Intent 還包含「 data 」• Intent 的 action 指定這個 Intent 的「動作」是什麼,

Android 會依指定的動作進行處理;但有些 action可以附帶資料 (data) ,這個資料是以 URI 的格式撰寫

Page 5: Android Intent

ACTION_VIEW

Page 6: Android Intent

範例一、內建的動作“ ACTION_VIEW”

• 使用內建的動作“ ACTION_VIEW” 做一個「啟動瀏覽器上網」的應用程式• 可以在 Android 應用程式裡顯示自已的

HTML 文件,或是線上的網頁• data 格式

http:// 網址

Page 7: Android Intent

不用“ ACTION_VIEW”• 建立新專案 : HelloWeb

Page 8: Android Intent

不用“ ACTION_VIEW”• HelloWeb.java 程式 loadData() 的參數如下:第一個參數: HTML 內容 第二個參數: MimeType 類型,指定為

text/html ,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8 ( Unicode )

使用 HTML 標籤當參數

Page 9: Android Intent

不用“ ACTION_VIEW”• main.xml

Page 10: Android Intent

不用“ ACTION_VIEW”

Page 11: Android Intent

不用“ ACTION_VIEW”• HelloWeb.java 程式 loadData() 的參數如下:第一個參數: HTML 內容 第二個參數: MimeType 類型,指定為

text/html ,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8 ( Unicode )

使用網址當參數

Page 12: Android Intent

不用“ ACTION_VIEW”

Page 13: Android Intent

不用“ ACTION_VIEW”• androidmanifest.xml 裡,需要加入

android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATE的權限才能上

Page 14: Android Intent

不用“ ACTION_VIEW”• 如果使用 emulator 還是不能上網,可能是 DNS 問題,請• 執行: adb shell• 輸入: getprop• 輸入: setprop net.dns1 168.95.1.1

這是目前 DNS 設定請改成一個可以用的例如中華電信 168.95.1.1

Page 15: Android Intent

使用內建的動作“ ACTION_VIEW”• 改用 ACTION_VIEW

data

action

Page 16: Android Intent

使用內建的動作“ ACTION_VIEW”

Page 17: Android Intent

範例二、利用 Intent 玩 Google Maps• 建立新專案 : HelloMaps

沒有 Google APIs target

Page 18: Android Intent

範例二、利用 Intent 玩 Google Maps• 如果沒有 Google APIs target• 請選擇 Available packages 進行安裝

Page 19: Android Intent

範例二、利用 Intent 玩 Google Maps• 安裝完 Google APIs target 畫面

Page 20: Android Intent

範例二、利用 Intent 玩 Google Maps

• 建立新專案 : IntentMaps

Page 21: Android Intent

顯示 Google Maps 地圖

都是 ACTION_VIEW ,但資料格式不同

Page 22: Android Intent

範例二、利用 Intent 玩 Google Maps

• AVD 也要對應具備 Google APIs 功能

Page 23: Android Intent

範例二、利用 Intent 玩 Google Maps

• 增加 <uses-permission android:name="android.permission.INTERNET" />

Page 24: Android Intent

範例二、利用 Intent 玩 Google Maps

Page 25: Android Intent

範例二、利用 Intent 玩 Google Maps

– Google Maps

URI 格式 :

geo:latitude,longitudegeo:latitude,longitude?z=zoomgeo:0,0?q=my+street+addressgeo:0,0?q=business+near+city

– Google Streetview

URI 格式 :

google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom

Page 26: Android Intent

範例二、利用 Intent 玩 Google Maps

• 顯示地圖Uri uri = Uri.parse("geo:38.899533,-77.036476"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);

• 路徑規劃Uri uri = Uri.parse("http://maps.google.com/maps? f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);

//where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456

Page 27: Android Intent

ACTION_CALL

Page 28: Android Intent

範例二、 HelloIntentDialer• 啟動撥號器 (dialer) 並撥號• action: ACTION_CALL• 執行步驟:1. 先產生一個 Intent 物件:  Intent dial = new Intent();2. 設定 Intent 的 action 為「 android.intent.action.CALL 」,這是一個內建的

action :  dial.setAction("android.intent.action.CALL");內建 action 「 CALL 」需要附帶一筆資料,而資料的寫法是使用 URI 格式:  dial.setData(Uri.parse("tel:119"));4. 「 CALL 」是一個 activity action ,所以呼叫 startActivity() 向 Intent 送給框架:  startActivity(dial);

Page 29: Android Intent

範例二、 HelloIntentDialer

• HelloIntentDialer.java 的完整程式

http://www.jollen.org/blog/2009/08/jollen-android-programming-27.html

Page 30: Android Intent

範例二、 HelloIntentDialer• 因為 permission 的關係,所以也要在

AndroidManifest.xml 裡加上「 CALL_PHONE 」的權限。 AndroidManifest.xml 的完整內容如下

Page 31: Android Intent

??HelloIntentMusic

• 使用者按下「 Select Music 」後,可以由音樂清單裡選擇音樂並撥放• action: ACTION_GET_CONTENT

http://blogold.chinaunix.net/u1/44301/showart_2360056.html

Page 32: Android Intent

利用 Intent 切換 Activity獨立的 Activity

Page 33: Android Intent

切換 Activity

• 使用 Eclipse 建立新專案– Project Name=Jao– Application Name=MyButton– Package Name=com.android.jao– Create Activity= Jao

Page 34: Android Intent

main.xml

Page 35: Android Intent

Close application 按鈕程式1

2

3

main.xml 中的 android:id 屬性

Page 36: Android Intent

切換 Activity

• 建立對應的新畫面 sample_page.xml–res/layout/sample_page.xml

• 建立對應的程式 sample_page.java–src/com.example.android.button/

sample_page.java• 在 AndroidManiFest.xml 中加入

Activity

Page 37: Android Intent

切換 Activity• 建立對應的畫面 sample_page.xml

12

Page 38: Android Intent

按鈕元件切換 Activity• 建立對應的畫面 sample_page.xml

複製 main.xml 的結構

Page 39: Android Intent

按鈕元件切換 Activity• 建立對應的畫面 sample_page.xml

Page 40: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

Page 41: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

1

2

Page 42: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

3 輸入 activity4

Page 43: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

5

Page 44: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

出現基本結構複製 HelloBMI.java 內的程式 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Sample_page); }

這裡要改

Page 45: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

1

2

3

4

Page 46: Android Intent

按鈕元件切換 Activity• 建立對應的程式 sample_page.java

Page 47: Android Intent

按鈕元件切換 Activity• 加入從 Jao.java 呼叫 sample_page.java• 先在 main.xml 加入一個按鈕

Page 48: Android Intent

按鈕元件切換 Activity• 在 Jao.java 加入呼叫按鈕與程式

Page 49: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

1

Page 50: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

2

Page 51: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

3

Page 52: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

4

5

Page 53: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

Page 54: Android Intent

按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity

Page 55: Android Intent

執行按鈕元件切換 Activity• 解決” Unparsed aapt error(s)! Check the

console for output” 問題(如果有)

Page 56: Android Intent

執行按鈕元件切換 Activity

Page 57: Android Intent

執行按鈕元件切換 Activity

Page 58: Android Intent

執行按鈕元件切換 Activity

Page 59: Android Intent

執行按鈕元件跳頁

Page 60: Android Intent

利用 Intent 切換 Activity相依的 Activity

Page 61: Android Intent

修改 HelloBMI

• 相依的 Activity :有資料傳遞• 加入新 Activity : Report.java• 原 Activity(HelloBMI.java) :輸入頁面– 輸入身高與體重值

• 新 Activity(Report.java) :結果頁面– 接收身高與體重值,計算並顯示結果

Page 62: Android Intent

修改 HelloBMI-加入 class

• 相

Page 63: Android Intent

修改 HelloBMI-加入介面 xml

• 相

Page 64: Android Intent

修改 HelloBMI-修改 AndroidManifest.xml

• 相

Page 65: Android Intent

修改 HelloBMI

• 相

Page 66: Android Intent

更多 Intent

• 更多 Intent• http://ysl-paradise.blogspot.com/2008/12/intent.html• http://iceskysl.1sters.com/?p=462

Page 67: Android Intent

AndroidManifest.xml

• Eclipse 中專案 /AndroidManifest.xml• 定義整個專案程式用到的資源清單• 尤其是 intentfilter 這部分

Page 68: Android Intent

AndroidManifest.xml

程式進入點的名稱空間程式版本

SDK版本

應用程式顯示 icon

應用程式顯示名稱

Activity class名稱

本 activity 是程式進入點 程式會出現在應用程式列表