Download
android intent n.
Skip this Video
Loading SlideShow in 5 Seconds..
Android Intent PowerPoint Presentation
Download Presentation
Android Intent

Android Intent

211 Vues Download Presentation
Télécharger la présentation

Android Intent

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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

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

  3. AndroidIntent (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:  撥電話

  4. AndroidIntent (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” • 使用內建的動作“ACTION_VIEW” 做一個「啟動瀏覽器上網」的應用程式 • 可以在 Android 應用程式裡顯示自已的 HTML 文件,或是線上的網頁 • data格式 • http://網址

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

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

  9. 不用“ACTION_VIEW” • main.xml

  10. 不用“ACTION_VIEW”

  11. 不用“ACTION_VIEW” 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.dns1 168.95.1.1 這是目前DNS設定 請改成一個可以用的 例如中華電信168.95.1.1

  15. 使用內建的動作“ACTION_VIEW” • 改用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 MapsURI 格式:geo:latitude,longitudegeo:latitude,longitude?z=zoomgeo:0,0?q=my+street+addressgeo:0,0?q=business+near+city • Google StreetviewURI 格式:google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom

  26. 範例二、利用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

  27. ACTION_CALL

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

  29. 範例二、HelloIntentDialer • HelloIntentDialer.java的完整程式 http://www.jollen.org/blog/2009/08/jollen-android-programming-27.html

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

  31. ??HelloIntentMusic • 使用者按下「Select Music」後,可以由音樂清單裡選擇音樂並撥放 • action: ACTION_GET_CONTENT http://blogold.chinaunix.net/u1/44301/showart_2360056.html

  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 • 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