Download presentation
Presentation is loading. Please wait.
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版本
Similar presentations