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分為二種: Activity Action: 啟動Activity的action Broadcast Action: 透過廣撥器處理的action 另外,可自行定義一個Intent,設定可接收此Intent的Service(這就是Action),並透過「送出Intent」的方式,請Android啟動該Service 除了action外,Intent還包含「data」 Intent的action指定這個Intent的「動作」是什麼,Android會依指定的動作進行處理;但有些action可以附帶資料(data),這個資料是以URI的格式撰寫
ACTION_VIEW
範例一、內建的動作“ACTION_VIEW” 可以在 Android 應用程式裡顯示自已的 HTML 文件,或是線上的網頁 data格式 http://網址
不用“ACTION_VIEW” 建立新專案: HelloWeb
不用“ACTION_VIEW” HelloWeb.java 程式 loadData() 的參數如下: 第一個參數:HTML 內容 第二個參數:MimeType 類型,指定為 text/html,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8(Unicode) HelloWeb.java 程式 使用HTML標籤當參數
不用“ACTION_VIEW” main.xml
不用“ACTION_VIEW”
不用“ACTION_VIEW” HelloWeb.java 程式 loadData() 的參數如下: 第一個參數:HTML 內容 第二個參數:MimeType 類型,指定為 text/html,即 HTML 類型文件 第三個參數:文字編碼方法,指定為 utf-8(Unicode) HelloWeb.java 程式 使用網址當參數
不用“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” 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=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 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 main.xml中的android:id屬性 2 3
切換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
切換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 輸入activity 3 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://iceskysl.1sters.com/?p=462 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版本