1 / 54

Android Intents

12. Android Intents. Notes are based on: Android Developers http://developer.android.com/index.html. 12. Android – Intents Intents. Android Activities Một ứng dụng Android có thể bao gồm nhiều activity.

olaf
Download Presentation

Android Intents

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 12 Android Intents Notes are based on: Android Developers http://developer.android.com/index.html

  2. 12. Android – Intents Intents • Android ActivitiesMột ứng dụng Android có thể bao gồm nhiều activity. • Một activity dùng phương thức setContentView(...) để hiện một (thông thường) giao diện người dùng mà từ đó có thể thực hiện các hành động. • Các activity tồn tại độc lập với nhau, nhưng chúng thường trao đổi dữ liệu và các action (hành động). • Thông thường, một activity được chỉ định là activity đầu tiên (main) cái sẽ hiện ra đầu tiên khi ứng dụng được bật. • Việc chuyển từ activity này sang activity khác được thực hiện bằng cách yêu cầu activity hiện hành thực thi một intent. • Các activity tương tác với nhau theo hình thức không đồng bộ. 2

  3. 12. Android – Intents Intents Android Activities Android Application Main Activity results intents Sub-Activity-1 Sub-Activity-n extras 3 3

  4. 12. Android – Intents Invoking intents Taken from: http://code.google.com/android/reference/android/content/Intent.html Intent được kích hoạt qua một trong các cách sau  4

  5. 12. Android – Intents Intent primary attributes Taken from: http://code.google.com/android/reference/android/content/Intent.html Các tham số chính của một Intent: Action action có sẵn (built-in) cần thực hiện, chẳng hạn ACTION_VIEW, ACTION_EDIT, ACTION_MAIN, … hoặc user-created-activity Data  primary data - dữ liệu dành cho thực hiện action, chẳng hạn số điện thoại cần gọi (biểu diễn dưới dạng một Uri). Activity-1 Intent: { action + data } Activity-2 Optional results 5

  6. 12. Android – Intents Intents primary attributes Taken from: http://code.google.com/android/reference/android/content/Intent.html Thông thường, một intent được gọi như sau: IntentmyActivity = new Intent (action, data); startActivity (myActivity); Primary data (as an URI) tel:// http:// sendto:// Built-in or user-created activity 6 6

  7. 12. Android – Intents Actions Taken from: http://code.google.com/android/reference/android/content/Intent.html Ví dụ về các cặp action/data: ACTION_DIAL  tel:123Bật ứng dụng điện thoại với số điện thoại đã cho được điền sẵn. ACTION_VIEW  http://www.google.comMở trang Google trong một browser view. Lưu ý rằng VIEW action thực hiện việc gì mà nó cho là hợp lý nhất đối với mỗi URI cụ thể. ACTION_EDIT  content://contacts/people/2Soạn thông tin về người có ID bằng "2“ trong danh sách contacts. ACTION_VIEW  content://contacts/people/2 Bật activity để hiện thông tin về người thứ 2 trong danh sách contacts. ACTION_VIEW  content://contacts/people/Hiện một danh sách người, người dùng có thể duyệt qua danh sách đó. Việc chọn một người cụ thể để xem chi tiết sẽ gây ra một intent mới 7

  8. 12. Android – Intents Standard Activity Actions 8 8

  9. 12. Android – Intents Example: Display phone dialer • Taken from: http://code.google.com/android/reference/android/content/Intent.html • Example • Display the phone dialer with the given number filled in. • Intent myActivity2 = new Intent (Intent.ACTION_DIAL, Uri.parse( "tel:555-1234")); • startActivity(myActivity2); 9

  10. 12. Android – Intents Secondary Attributes • Taken from: http://code.google.com/android/reference/android/content/Intent.html • Các tham số phụBên cạnh hai tham số chính action/data , còn có các tham số phụ có thể dùng cho intent, ví dụ: • Category 2. Components • 3. Type 4. Extras • Ví dụ: Dùng Google tìm các câu lạc bộ gôn • Intent intent = new Intent (Intent.ACTION_WEB_SEARCH ); • intent.putExtra(SearchManager.QUERY, • "straight hitting golf clubs"); • startActivity(intent); Secondary data 10 Apparently the Google answer is ‘none’

  11. 12. Android – Intents Example: sending an SMS Taken from: http://code.google.com/android/reference/android/content/Intent.html Ví dụ: Gửi một tin nhắn Intent intent = new Intent( Intent.ACTION_SENDTO, Uri.parse("sms:5551234")); intent.putExtra("sms_body", "are we playing golf next Saturday?"); startActivity(intent); 11 “address”, “sms_body” are keywords

  12. 12. Android – Intents Example: Displaying an image Taken from: http://code.google.com/android/reference/android/content/Intent.html Example: Hiển thị hình ảnh (using extra attributes) Intent myIntent = new Intent(); myIntent.setType("image/pictures/*"); myIntent.setAction(Intent.ACTION_GET_CONTENT); startActivity(myIntent); 12

  13. 12. Android – Intents Complete Example Activity1 cho user nhập số điện thoại và yêu cầu Activity2 (built-in) thực hiện cuộc gọi. • <?xml version="1.0" encoding="utf-8"?> • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" • android:orientation="vertical" • android:layout_width="fill_parent" • android:layout_height="fill_parent" > • <TextView • android:id="@+id/label1" • android:layout_width="fill_parent" • android:layout_height="wrap_content" • android:background="#ff0000cc" • android:text="This is Activity1" • android:textStyle="bold" • android:textSize="20sp" /> • <EditText • android:id="@+id/text1" • android:layout_width="fill_parent" • android:layout_height="54px" • android:text="tel:555-1234" • android:textSize="18sp" /> • <Button • android:id="@+id/btnCallActivity2" • android:layout_width="149px" • android:layout_height="wrap_content" • android:text="Make Phone Call" • android:textStyle="bold" /> • </LinearLayout> 13

  14. 12. Android – Intents Complete Example Giao diện hoạt động 14

  15. 12. Android – Intents Complete Example Mã nguồn //IntentDemo1_Intent: making a phone call Package es.demo; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; publicclass IntentDemo1 extends Activity { TextView label1; EditText text1; Button btnCallActivity2; 15

  16. 12. Android – Intents Complete Example onCreate: gắn handler vào nút bấm @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { setContentView(R.layout.main); label1 = (TextView)findViewById(R.id.label1); text1 = (EditText)findViewById(R.id.text1); btnCallActivity2 = (Button)findViewById(R.id.btnCallActivity2); btnCallActivity2.setOnClickListener(newClickHandler()); } catch (Exception e) { Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } }//onCreate 16

  17. 12. Android – Intents Complete Example ClickHandler hoạt động khi người dùng bấm nút • privateclass ClickHandler implements OnClickListener { • @Override • publicvoid onClick(View v) { • try { • // myActivity2 places a phone call • // for ACTION_CALL or ACTION_DIAL • // use 'tel:' formatted data: "tel:555-1234" • String myData = text1.getText().toString(); • Intent myActivity2 = new Intent(Intent.ACTION_DIAL, Uri.parse(myData)); • startActivity(myActivity2); • } • catch (Exception e) { • Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); • } • }//onClick • }//ClickHandler • }//IntentDemo1 17

  18. 12. Android – Intents Complete Example Manifest file <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="es.demo" android:versionCode="1" android:versionName="1.0"> <uses-sdkandroid:minSdkVersion="7" /> <applicationandroid:icon="@drawable/icon" android:label="@string/app_name"> <activityandroid:name=".IntentDemo1" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <categoryandroid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> Action/category 18

  19. 12. Android – Intents Standard Broadcast Actions 19

  20. 12. Android – Intents Example: Call immediately More Examples: Using Standard Actions Thực hiện cuộc gọi Sửa ví dụ, thay phương thức ‘ClickHandler’ bằng đoạn mã sau String myData = "tel:555-1234"; Intent myActivity2 = new Intent(Intent.ACTION_CALL, Uri.parse(myData)); startActivity(myActivity2); Cần permission (soạn trong file manifest): <uses-permission android:name="android.permission.CALL_PHONE" /> 20

  21. 12. Android – Intents Example: Show all contacts More Examples: Using Standard Actions Xem tất cả các Contact Sửa ví dụ, thay phương thức ‘ClickHandler’ bằng đoạn mã sau String myData = "content://contacts/people/"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2); 21

  22. 12. Android – Intents Example: Show a contact More Examples: Using Standard Actions Hiển thị một contact (ID=2) Sửa ví dụ, thay phương thức ‘ClickHandler’ bằng đoạn mã sau String myData = "content://contacts/people/2"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2); 22

  23. 12. Android – Intents Example: Edit a contact More Examples: Using Standard Actions Sửa một Contact (ID = 2) Sửa ví dụ, thay phương thức ‘ClickHandler’ bằng đoạn mã sau String myData = "content://contacts/people/2"; Intent myActivity2 = new Intent(Intent.ACTION_EDIT, Uri.parse(myData)); startActivity(myActivity2); 23

  24. 12. Android – Intents Example: View a Webpage More Examples: Using Standard Actions Xem một trang web Sửa ví dụ, thay phương thức ‘ClickHandler’bằng đoạn mã sau String myData = "http://www.youTube.com"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2); Lưu ý. Bổ sung vào Manifest một yêu cầu sử dụng Internet: <uses-permission android:name="android.permission.INTERNET" /> 24

  25. 12. Android – Intents Geo Mapping an Address More Examples: Using Standard Actions Geo Mapping một địa chỉ Dùng một biểu thức geoCode cho một địa chỉ theo phố (hoặc địa danh, chẳng hạn ‘golden gate ca’ ) Thay các dấu cách bằng ‘+’. String geoCode = "geo:0,0?q=1860+east+18th+street+cleveland+oh"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoCode)); startActivity(intent); Sửa Manifest để bổ sung các yêu cầu sau: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 25

  26. 12. Android – Intents Geo Mapping Coordinates More Examples: Geo Mapping tọa độ (vĩ độ, kinh độ) Dùng một geoCode chứa vĩ độ và kinh độ (và hệ số zoom ‘?z=xx’ với xx trong khoảng 1..23) String geoCode = "geo:41.5020952,-81.6789717"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoCode)); startActivity(intent); Sửa Manifest để bổ sung các yêu cầu sau: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 26

  27. 12. Android – Intents Get driving directions More Examples: Tìm đường từ địa điểm A đến B String url = "http://maps.google.com/maps?"+ "saddr=9.938083,-84.054430&daddr=9.926392,-84.055964"; Intent intent = newIntent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent);

  28. 12. Android – Intents Use a mnemonic to articulate an address More Examples // use a mnemonic to articulate an address String thePlace = “Cleveland State University”; Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q= (" + thePlace + ")“ );startActivity(intent);

  29. 12. Android – Intents Google StreetView More Examples: Using Standard Actions Geo Mapping - Google StreetView geoCode Uri structure: google.streetview:cbll=lat,lng&cbp=1, yaw,,pitch,zoom&mz=mapZoom Reference: http://developer.android.com/guide/appendix/g-app-intents.html String geoCode = "google.streetview:cbll=41.5020952,-81.6789717&cbp=1,270,,45,1&mz=1"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoCode)); startActivity(intent); Modify the Manifest adding the following requests: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 29

  30. 12. Android – Intents Launching the Music Player More Examples: Using Standard Actions Launching the Music Player Reference: http://developer.android.com/guide/appendix/g-app-intents.html //launch music player Intent myActivity2 = new Intent("android.intent.action.MUSIC_PLAYER"); startActivity(myActivity2); 30

  31. 12. Android – Intents Playing a song More Examples: Using Standard Actions Playing a song stored in the SD card Reference: http://developer.android.com/guide/appendix/g-app-intents.html // play song "amarcord.mp3" saved in the SD Intent myActivity2 = new Intent(android.content.Intent.ACTION_VIEW); Uri data = Uri.parse("file:///sdcard/amarcord.mp3"); String type = "audio/mp3"; myActivity2.setDataAndType(data, type); startActivity(myActivity2); 31

  32. 12. Android – Intents Sending MMS More Examples: Using Standard Actions Sending MMS Add picture #1 from SD to MMS Reference: http://developer.android.com/guide/appendix/g-app-intents.html //send mms attach picture #1 to it Uri uri = Uri.parse("content://media/external/images/media/1"); myActivity2 = new Intent(Intent.ACTION_SEND); myActivity2.putExtra("address", "555-1234"); myActivity2.putExtra("sms_body", "some text message goes here"); myActivity2.putExtra(Intent.EXTRA_STREAM, uri); myActivity2.setType("image/png"); startActivity(myActivity2); 32

  33. 12. Android – Intents Sending Email More Examples: Using Standard Actions Sending Email Reference: http://developer.android.com/guide/appendix/g-app-intents.html // send email Uri uri = Uri.parse("mailto:v.matos@csuohio.edu"); Intent myActivity2 = new Intent(Intent.ACTION_SENDTO, uri); // you may skip the next two pieces [subject/text] myActivity2.putExtra(Intent.EXTRA_SUBJECT, "subject goes here"); myActivity2.putExtra(Intent.EXTRA_TEXT, "The email's body goes here"); startActivity(myActivity2); 33

  34. 12. Android – Intents Setting System More Examples: Using Standard Actions Setting System Reference: http://developer.android.com/reference/android/provider/Settings.html Intentintent = new Intent( android.provider.Settings.ACTION_SETTINGS); startActivity(intent); 34

  35. 12. Android – Intents Setting System Locale More Examples: Using Standard Actions Setting System Locale: Language & Keyboard Reference: http://developer.android.com/reference/android/provider/Settings.html Intent intent = new Intent( android.provider.Settings.ACTION_LOCALE_SETTINGS); startActivity(intent); 35

  36. 12. Android – Intents Starting Activities and Getting Results • Gọi activity và lấy kết quả • Phương thức startActivity(Intent) dùng để bật một activity mới và nó sẽ được đặt trên đỉnh activity stack. • Đôi khi, ta muốn lấy kết quả trả về từ activity được gọi (sub-activity) khi nó kết thúc. • Ví dụ, ta bật một activity cho phép người dùng chọn một người từ danh sách contact; khi activity đó kết thúc, nó trả về người được chọn. 36

  37. 12. Android – Intents Starting Activities and Getting Results Để có thể lấy kết quả trả về từ activity được gọi, ta dùng phương thức sau để gọi activity: startActivityForResult ( Intent, requestCodeID ) Trong đó, tham số thứ hai (requestCodeID) định danh lời gọi activity. Phương thức không đồng bộ sau lấy kết quả trả về từ sub-activity onActivityResult ( requestCodeID, resultCode, Intent ) 37

  38. 12. Android – Intents Starting Activities and Getting Results • Trước khi một activity kết thúc, nó có thể gọi setResult (resultCode) • để gửi một tín hiệu kết thúc về cho nơi gọi nó (parent activity). • Trong đó, result code có thể có giá trị chuẩn như Activity.RESULT_CANCELED, Activity.RESULT_OK, • hoặc một giá trị tùy biến khác. • Tất cả thông tin trên có thể được nhận bởi phương thức tại activity cha • onActivityResult (int requestCodeID, int resultCode, Intent data) • với ID mà activity cha đã cung cấp từ trước. • Nếu một activity con thất bại vì lí do nào đó (chẳng hạn crash), activity cha sẽ nhận được một kết quả trả về với giá trị RESULT_CANCELED. 38

  39. 12. Android – Intents Starting Activities and Getting Results Intent: {action + data + requestCodeID } Activity-1 startActivityForResult … … __________________ onActivityResult() … … Activity-2 _________________ onResult() … … requestCodeID resultCode optional data 39

  40. 12. Android – Intents Intents Example2. Let’s play golf - Call for a tee-time. Show all contacts and pick a particular one (Intent.ACTION_PICK). For a successful interaction the main-activity accepts the returned URI identifying the person we want to call (content://contacts/people/n). ‘Nicely’ show the selected contact’s entry allowing calling, texting, emailing actions (Intent.ACTION_VIEW). Intent.ACTION_PICK User’s main Activity-1 Built-in Activity-2 (show contact list) Contact’s Uri Call Send text message Send email Intent.ACTION_VIEW Built-in Activity-3 (show selected contact) 40

  41. 12. Android – Intents Intents Example2. Let’s play golf - Call for a tee-time. Cont. Main Activity Intent.ACTION_PICK Intent.ACTION_VIEW 41

  42. 12. Android – Intents Intents Example2 (cont.) Let’s play golf - Call for a tee-time 42 Selected contact’s URI Place the call Terminate the call

  43. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. //IntentDemo2_Intent: making a phone call //receiving results from a sub-activity package cis493.intents; importandroid.app.Activity; importandroid.content.Intent; importandroid.net.Uri; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.*; publicclass IntentDemo2 extends Activity { TextViewlabel1; EditTexttext1; Button btnCallActivity2; 43

  44. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. • @Override • publicvoidonCreate(Bundle savedInstanceState) { • super.onCreate(savedInstanceState); • try { • setContentView(R.layout.main); • label1 = (TextView)findViewById(R.id.label1); • text1 = (EditText)findViewById(R.id.text1); • btnCallActivity2 = (Button)findViewById(R.id.btnPickContact); • btnCallActivity2.setOnClickListener(newClickHandler()); • } • catch (Exception e) { • Toast.makeText(getBaseContext(), • e.getMessage(), Toast.LENGTH_LONG).show(); • } • }//onCreate 44

  45. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. • privateclassClickHandlerimplementsOnClickListener { • @Override • publicvoidonClick(View v) { • try { • // myData refer to: content://contacts/people/ • String myData = text1.getText().toString(); • //you may also try ACTION_VIEW instead • Intent myActivity2 = new Intent(Intent.ACTION_PICK, • Uri.parse(myData)); • // start myActivity2. • // Tell it that our requestCodeID (or nickname) is 222 • startActivityForResult(myActivity2, 222); • // Toast.makeText(getApplicationContext(), • // "I can't wait for you", 1).show(); • } • catch (Exception e) { • label1.setText(e.getMessage()); • } • }//onClick • }//ClickHandler 45

  46. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. • @Override • protectedvoidonActivityResult(intrequestCode, • intresultCode, • Intent data) { • super.onActivityResult(requestCode, resultCode, data); • try { • // use requestCode to find out who is talking back to us • switch (requestCode){ • case (222): { • // 222 is our friendly contact-picker activity • if (resultCode == Activity.RESULT_OK) { • String selectedContact = data.getDataString(); • // it will return an URI that looks like: • // content://contacts/people/n • // where n is the selected contacts' ID • label1.setText(selectedContact.toString()); • //show a 'nice' screen with the selected contact • Intent myAct3 = new Intent (Intent.ACTION_VIEW, • Uri.parse(selectedContact)); • startActivity(myAct3); • } Listener 46

  47. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. • else { • //user pressed the BACK button • label1.setText("Selection CANCELLED " • + requestCode + " " + resultCode); • } • break; • } • }//switch • } • catch (Exception e) { • Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); • } • }// onActivityResult • }//IntentDemo2 47

  48. 12. Android – Intents Intents Example2. Calling a sub-activity, receiving results. • <?xml version="1.0" encoding="utf-8"?> • <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" • android:orientation="vertical" • android:layout_width="fill_parent" • android:layout_height="fill_parent“ > • <TextView • android:id="@+id/label1" • android:layout_width="fill_parent" • android:layout_height="wrap_content" • android:background="#ff0000cc" • android:text="This is Activity1" • android:textStyle="bold" • android:textSize="20sp“/> • <EditText • android:id="@+id/text1" • android:layout_width="fill_parent" • android:layout_height="54px" • android:text="content://contacts/people/" • android:textSize="18sp” /> • <Button • android:id="@+id/btnPickContact" • android:layout_width="149px" • android:layout_height="wrap_content" • android:text="Pick a Contact" • android:textStyle="bold“ /> • </LinearLayout> 48

  49. 12. Android – Intents Intents Example3. Showing Pictures and Video - Calling a sub-activity, receiving results. • privatevoidshowSoundTracks() { • Intent myIntent = new Intent(); • myIntent.setType("video/*, images/*"); • myIntent.setAction(Intent.ACTION_GET_CONTENT); • startActivityForResult(myIntent, 0); • }//showSoundTracks • @Override • protectedvoidonActivityResult(intrequestCode, intresultCode, Intent intent) { • super.onActivityResult(requestCode, resultCode, intent); • if ((requestCode == 0) && (resultCode == Activity.RESULT_OK)) { • String selectedImage = intent.getDataString(); • Toast.makeText(this, selectedImage, 1).show(); • // show a 'nice' screen with the selected image • Intent myAct3 = new Intent(Intent.ACTION_VIEW, Uri.parse(selectedImage)); • startActivity(myAct3); • } • }//onActivityResult All videos and all still images 49

  50. 12. Android – Intents Intents Example3. Showing Pictures and Video - Calling a sub-activity, receiving results. video 50

More Related