Presentation is loading. Please wait.

Presentation is loading. Please wait.

Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.

Similar presentations


Presentation on theme: "Android Intent 建國科技大學 資管系 饒瑞佶 2011/1."— Presentation transcript:

1 Android Intent 建國科技大學 資管系 饒瑞佶 2011/1

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

3 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範例  開啟瀏覽器 geo: 開啟Google Maps tel:  撥電話

4 Android Intent (III) Android內建的Intent action分為二種:
Activity Action: 啟動Activity的action Broadcast Action: 透過廣撥器處理的action 另外,可自行定義一個Intent,設定可接收此Intent的Service(這就是Action),並透過「送出Intent」的方式,請Android啟動該Service 除了action外,Intent還包含「data」 Intent的action指定這個Intent的「動作」是什麼,Android會依指定的動作進行處理;但有些action可以附帶資料(data),這個資料是以URI的格式撰寫

5 ACTION_VIEW

6 範例一、內建的動作“ACTION_VIEW”
可以在 Android 應用程式裡顯示自已的 HTML 文件,或是線上的網頁 data格式

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

8 不用“ACTION_VIEW” HelloWeb.java 程式 loadData() 的參數如下: 第一個參數:HTML 內容
第二個參數:MimeType 類型,指定為 text/html,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8(Unicode) HelloWeb.java 程式 使用HTML標籤當參數

9 不用“ACTION_VIEW” main.xml

10 不用“ACTION_VIEW”

11 不用“ACTION_VIEW” HelloWeb.java 程式 loadData() 的參數如下: 第一個參數:HTML 內容
第二個參數:MimeType 類型,指定為 text/html,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8(Unicode) HelloWeb.java 程式 使用網址當參數

12 不用“ACTION_VIEW”

13 不用“ACTION_VIEW” androidmanifest.xml裡,需要加入 的權限才能上
android.permission.INTERNET android.permission.ACCESS_NETWORK_STATE 的權限才能上

14 不用“ACTION_VIEW” 如果使用emulator還是不能上網,可能是DNS問題,請 執行:adb shell 輸入:getprop
輸入:setprop net.dns 這是目前DNS設定 請改成一個可以用的 例如中華電信

15 使用內建的動作“ACTION_VIEW”
data action

16 使用內建的動作“ACTION_VIEW”

17 範例二、利用Intent 玩Google Maps
建立新專案: HelloMaps 沒有Google APIs target

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

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

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

21 顯示Google Maps地圖 都是ACTION_VIEW,但資料格式不同

22 範例二、利用Intent 玩Google Maps
AVD也要對應具備Google APIs功能

23 範例二、利用Intent 玩Google Maps
增加 <uses-permission android:name="android.permission.INTERNET" />

24 範例二、利用Intent 玩Google Maps

25 範例二、利用Intent 玩Google Maps
Google Maps URI 格式: geo:latitude,longitude geo:latitude,longitude?z=zoom geo:0,0?q=my+street+address geo:0,0?q=business+near+city Google Streetview URI 格式: google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom

26 範例二、利用Intent 玩Google Maps
顯示地圖 Uri uri = Uri.parse("geo: , "); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); 路徑規劃 Uri uri = Uri.parse(" 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:

27 ACTION_CALL

28 範例二、HelloIntentDialer
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);

29 範例二、HelloIntentDialer
HelloIntentDialer.java的完整程式

30 範例二、HelloIntentDialer
因為permission的關係,所以也要在AndroidManifest.xml裡加上「CALL_PHONE」的權限。AndroidManifest.xml的完整內容如下

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

32 利用Intent切換Activity 獨立的Activity

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

34 main.xml

35 Close application按鈕程式
1 main.xml中的android:id屬性 2 3

36 切換Activity 建立對應的新畫面sample_page.xml 建立對應的程式sample_page.java
res/layout/sample_page.xml 建立對應的程式sample_page.java src/com.example.android.button/ sample_page.java 在AndroidManiFest.xml中加入Activity

37 切換Activity 建立對應的畫面sample_page.xml 2 1

38 按鈕元件切換Activity 建立對應的畫面sample_page.xml 複製main.xml的結構

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

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

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

42 按鈕元件切換Activity 建立對應的程式sample_page.java 輸入activity 3 4

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

44 按鈕元件切換Activity 建立對應的程式sample_page.java 出現基本結構 複製HelloBMI.java內的程式
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Sample_page); } 這裡要改

45 按鈕元件切換Activity 建立對應的程式sample_page.java 1 2 3 4

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

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

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

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

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

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

52 按鈕元件切換Activity 在AndroidManifest.xml中加入Activity 4 5

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

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

55 執行按鈕元件切換Activity 解決” Unparsed aapt error(s)! Check the console for output” 問題(如果有)

56 執行按鈕元件切換Activity

57 執行按鈕元件切換Activity

58 執行按鈕元件切換Activity

59 執行按鈕元件跳頁

60 利用Intent切換Activity 相依的Activity

61 修改HelloBMI 相依的Activity:有資料傳遞 加入新Activity:Report.java
原Activity(HelloBMI.java):輸入頁面 輸入身高與體重值 新Activity(Report.java):結果頁面 接收身高與體重值,計算並顯示結果

62 修改HelloBMI-加入class

63 修改HelloBMI-加入介面xml

64 修改HelloBMI-修改AndroidManifest.xml

65 修改HelloBMI

66 更多Intent 更多Intent http://iceskysl.1sters.com/?p=462

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

68 AndroidManifest.xml Activity class名稱 程式進入點的名稱空間 程式版本 應用程式顯示名稱
應用程式顯示icon 本activity是程式進入點 程式會出現在應用程式列表 SDK版本


Download ppt "Android Intent 建國科技大學 資管系 饒瑞佶 2011/1."

Similar presentations


Ads by Google