Android Intent
Post on 20-Mar-2016
99 Views
Preview:
DESCRIPTION
Transcript
Android Intent (I)• Android 的事件處理機制稱為「 Intent 」• Intent 的作用與事件 (event) 很像,但與傳統的事件處理仍然有些差異• 傳統的事件處理,講求的是「處理者( handler )的觸發」,當一事件發生時,便 callback 事件的處理者,或是直接將該事件 forward 給應用程式,由應用程式處理• 在 Intent 裡, Android 將事件看成「應用程式的意圖」或「使用者的意圖」,並去解釋該意圖的目的,若
Android 系統本身能理解應用程式的意圖,便會「自行」去處理該意圖所應執行的工作
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: 撥電話
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 的格式撰寫
ACTION_VIEW
範例一、內建的動作“ ACTION_VIEW”
• 使用內建的動作“ ACTION_VIEW” 做一個「啟動瀏覽器上網」的應用程式• 可以在 Android 應用程式裡顯示自已的
HTML 文件,或是線上的網頁• data 格式
http:// 網址
不用“ ACTION_VIEW”• 建立新專案 : HelloWeb
不用“ ACTION_VIEW”• HelloWeb.java 程式 loadData() 的參數如下:第一個參數: HTML 內容 第二個參數: MimeType 類型,指定為
text/html ,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8 ( Unicode )
使用 HTML 標籤當參數
不用“ ACTION_VIEW”• main.xml
不用“ ACTION_VIEW”
不用“ ACTION_VIEW”• HelloWeb.java 程式 loadData() 的參數如下:第一個參數: HTML 內容 第二個參數: MimeType 類型,指定為
text/html ,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8 ( Unicode )
使用網址當參數
不用“ ACTION_VIEW”
不用“ ACTION_VIEW”• androidmanifest.xml 裡,需要加入
android.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATE的權限才能上
不用“ ACTION_VIEW”• 如果使用 emulator 還是不能上網,可能是 DNS 問題,請• 執行: adb shell• 輸入: getprop• 輸入: setprop net.dns1 168.95.1.1
這是目前 DNS 設定請改成一個可以用的例如中華電信 168.95.1.1
使用內建的動作“ ACTION_VIEW”• 改用 ACTION_VIEW
data
action
使用內建的動作“ ACTION_VIEW”
範例二、利用 Intent 玩 Google Maps• 建立新專案 : HelloMaps
沒有 Google APIs target
範例二、利用 Intent 玩 Google Maps• 如果沒有 Google APIs target• 請選擇 Available packages 進行安裝
範例二、利用 Intent 玩 Google Maps• 安裝完 Google APIs target 畫面
範例二、利用 Intent 玩 Google Maps
• 建立新專案 : IntentMaps
顯示 Google Maps 地圖
都是 ACTION_VIEW ,但資料格式不同
範例二、利用 Intent 玩 Google Maps
• AVD 也要對應具備 Google APIs 功能
範例二、利用 Intent 玩 Google Maps
• 增加 <uses-permission android:name="android.permission.INTERNET" />
範例二、利用 Intent 玩 Google Maps
範例二、利用 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
範例二、利用 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
ACTION_CALL
範例二、 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);
範例二、 HelloIntentDialer
• HelloIntentDialer.java 的完整程式
http://www.jollen.org/blog/2009/08/jollen-android-programming-27.html
範例二、 HelloIntentDialer• 因為 permission 的關係,所以也要在
AndroidManifest.xml 裡加上「 CALL_PHONE 」的權限。 AndroidManifest.xml 的完整內容如下
??HelloIntentMusic
• 使用者按下「 Select Music 」後,可以由音樂清單裡選擇音樂並撥放• action: ACTION_GET_CONTENT
http://blogold.chinaunix.net/u1/44301/showart_2360056.html
利用 Intent 切換 Activity獨立的 Activity
切換 Activity
• 使用 Eclipse 建立新專案– Project Name=Jao– Application Name=MyButton– Package Name=com.android.jao– Create Activity= Jao
main.xml
Close application 按鈕程式1
2
3
main.xml 中的 android:id 屬性
切換 Activity
• 建立對應的新畫面 sample_page.xml–res/layout/sample_page.xml
• 建立對應的程式 sample_page.java–src/com.example.android.button/
sample_page.java• 在 AndroidManiFest.xml 中加入
Activity
切換 Activity• 建立對應的畫面 sample_page.xml
12
按鈕元件切換 Activity• 建立對應的畫面 sample_page.xml
複製 main.xml 的結構
按鈕元件切換 Activity• 建立對應的畫面 sample_page.xml
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
1
2
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
3 輸入 activity4
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
5
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
出現基本結構複製 HelloBMI.java 內的程式 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Sample_page); }
這裡要改
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
1
2
3
4
按鈕元件切換 Activity• 建立對應的程式 sample_page.java
按鈕元件切換 Activity• 加入從 Jao.java 呼叫 sample_page.java• 先在 main.xml 加入一個按鈕
按鈕元件切換 Activity• 在 Jao.java 加入呼叫按鈕與程式
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
1
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
2
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
3
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
4
5
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
按鈕元件切換 Activity• 在 AndroidManifest.xml 中加入 Activity
執行按鈕元件切換 Activity• 解決” Unparsed aapt error(s)! Check the
console for output” 問題(如果有)
執行按鈕元件切換 Activity
執行按鈕元件切換 Activity
執行按鈕元件切換 Activity
執行按鈕元件跳頁
利用 Intent 切換 Activity相依的 Activity
修改 HelloBMI
• 相依的 Activity :有資料傳遞• 加入新 Activity : Report.java• 原 Activity(HelloBMI.java) :輸入頁面– 輸入身高與體重值
• 新 Activity(Report.java) :結果頁面– 接收身高與體重值,計算並顯示結果
修改 HelloBMI-加入 class
• 相
修改 HelloBMI-加入介面 xml
• 相
修改 HelloBMI-修改 AndroidManifest.xml
• 相
修改 HelloBMI
• 相
更多 Intent
• 更多 Intent• http://ysl-paradise.blogspot.com/2008/12/intent.html• http://iceskysl.1sters.com/?p=462
AndroidManifest.xml
• Eclipse 中專案 /AndroidManifest.xml• 定義整個專案程式用到的資源清單• 尤其是 intentfilter 這部分
AndroidManifest.xml
程式進入點的名稱空間程式版本
SDK版本
應用程式顯示 icon
應用程式顯示名稱
Activity class名稱
本 activity 是程式進入點 程式會出現在應用程式列表
top related