Intent - 建國科技大學
Download
Report
Transcript Intent - 建國科技大學
Android Intent
建國科技大學 資管系
饒瑞佶
2011/1
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的action
2. 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.INTERNET
android.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,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=mapZoo
m
範例二、利用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/jollenandroid-programming-27.html
範例二、HelloIntentDialer
• 因為permission的關係,所以也要在
AndroidManifest.xml裡加上「CALL_PHONE」
的權限。AndroidManifest.xml的完整內容如
下
??HelloIntentMusic
• 使用者按下「Select Music」後,可以由音
樂清單裡選擇音樂並撥放
• action: ACTION_GET_CONTENT
http://blogold.chinaunix.net/u1/44301/showa
rt_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
main.xml中的android:id屬性
2
3
切換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
2
1
按鈕元件切換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
輸入activity
4
按鈕元件切換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
Activity class名稱
程式進入點的名稱空間
程式版本
應用程式顯示名稱
應用程式
顯示icon
本activity是程式進入點
程式會出現在應用程式列表
SDK版本