intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hướng dẫn lập trình cơ bản với Android - Bài 4

Chia sẻ: Ha Ngoc Chung | Ngày: | Loại File: PDF | Số trang:20

231
lượt xem
110
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Intent là một miêu tả về một hoạt động cần được thực hiện. Còn nói một cách đơn giản và dễ hiểu hơn, Intent là một cơ cấu cho phép truyền thông điệp giữa các thành phần của 1 ứng dụng và giữa các ứng dụng với nhau.

Chủ đề:
Lưu

Nội dung Text: Hướng dẫn lập trình cơ bản với Android - Bài 4

  1. Hư ng d n l p trình cơ b n v i Android - Bài 4 http://diendan.vietandroid.com/cac-bai-hoc-co-kem-ma-nguon/831-huong- Reflink: dan-lap-trinh-co-ban-voi-android-bai-4-a.html List tutorial Bài 0 - Cài ñ t và s d ng Android v i Eclipse Bài 1 - Cơ b n Android Bài 2 - Xây d ng giao di n ñơn gi n Bài 3 - ViewGroup và Custom Adapter Bài 4 - Intent và Broadcast Receiver Bài 5 - Service Bài 6 - SQLite Bài 7 - Content Provider Sorry m i ngư i vì quá lâu m i ra ñư c bài ti p theo. M t ph n vì công vi c b n b u, m t ph n vì lư i + ng i ^_^ mà ñã tr h n v i anh em. Mình ñoán nh ng newbie ñ c bài c a mình t 1, 2, 3 gi ñã s p thành pro h t r i, vì v y ñành dành bài này cho các newbie m i. Trong bài này mình s ñi sâu nói rõ v Intent, ph n cơ b n và ñóng vai trò r t quan tr ng trong l p trình ng d ng Android. Khái ni m v Intent: Theo ñ nh nghĩa c a Google, Intent là m t miêu t v m t ho t ñ ng c n ñư c th c hi n. Còn nói m t cách ñơn gi n và d hi u hơn, Intent là m t cơ c u cho phép truy n thông ñi p gi a các thành ph n c a 1 ng d ng và gi a các ng d ng v i nhau. Các thu c tính c a Intent: - action: là hành ñ ng ñư c th c hi n, vd : ACTION_VIEW, ACTION_MAIN - data: là d li u s ñư c x lý trong action, thư ng ñư c di n t là m t Uri (Uniform Resource Identifier, tham kh ohttp://en.wikipedia.org/wiki/Uniform...rce_Identifier ñ hi u rõ thêm chi ti t). VD: ACTION_VIEW content://contacts/people/1 - Hi n th thông tin v ngư i v i mã danh 1 ACTION_DIAL content://contacts/people/1 - Hi n th màn hình g i ñ n ngư i v i mã danh 1 ACTION_DIAL tel:123 - Hi n th màn hình g i v i s g i là 123 Ngoài ra còn có 1 s thu c tính mà ta có th b sung vào Intent: - category: b sung thêm thông tin cho action c a Intent. VD: CATEGORY_LAUNCHER thông báo s thêm vào Launcher như là m t ng d ng top-level - type: ch rõ ki u c a data - component: ch rõ thành ph n s nh n và x lý intent. Khi thu c tính này ñư c xác ñ nh thì các thu c tính khác s tr thành thu c tính ph . - extras: mang theo ñ i tư ng Bundle ch a các giá tr b sung. VD: ACTION_MAIN và CATEGORY_HOME: tr v màn hình Home c a Android (khi b m nút Home c a di ñ ng) Phân lo i Intent: Intent ñư c chia làm 2 lo i: www.Beenvn.com – T sách online
  2. - Explicit Intents: intent ñã ñư c xác ñ nh thu c tính component, nghĩa là ñã ch rõ thành ph n s nh n và x lý intent. Thông thư ng intent d ng này s không b sung thêm các thu c tính khác như action, data. Explicit Intent thương ñư c s d ng ñ kh i ch y các activity trong cùng 1 ng d ng. - Implicit Intents: Intent không ch rõ component x lý, thay vào ñó nó b sung thông tin trong các thu c tính. Khi intent ñư c g i ñi, h th ng s d a vào nh ng thông tin này ñ quy t ñ nh component nào thích h p nh t ñ x lý nó. VD: ACTION_DIAL tel:123 thông thư ng s ñư c h th ng giao cho activity Phone Dialer m c ñ nh c a Android x lý. M t s action thư ng s d ng trong Intent: ACTION_ANSWER - m Activity ñ x lý cu c g i t i, thư ng là Phone Dialer c a Android ACTION_CALL - m 1 Phone Dialer (m c ñ nh là PD c a Android) và ngay l p t c th c hi n cu c g i d a vào thông tin trong data URI ACTION_DELETE - m Activity cho phép xóa d li u mà ñ a ch c a nó ch a trong data URI ACTION_DIAL - m 1 Phone Dialer (m c ñ nh là PD c a Android) và ñi n thông tin l y t ñ a ch ch a trong data URI ACTION_EDIT - m 1 Activity cho phép ch nh s a d li u mà ñ a ch l y t data URI ACTION_SEND - m 1 Activity cho phép g i d li u l y t data URI, ki u c a d li u xác ñ nh trong thu c tính type ACTION_SENDTO - m 1 Activity cho phép g i thông ñi p t i ñ a ch l y t data URI ACTION_VIEW - action thông d ng nh t, kh i ch y activity thích h p ñ hi n th d li u trong data URI ACTION_MAIN - s d ng ñ kh i ch y 1 Activity OK, lý thuy t như th là ñã t m n. Gi chúng ta s chuy n qua ph n th c hành ñ hi u rõ cách s d ng Intent. Như ñã nêu trên, Intent chia làm 2 lo i: explicit intent và implicit intent. M i lo i Intent s có cách cài ñ t và s d ng khác nhau. Using Explicit Intents Yêu c u: Xây d ng chương trình g m 2 Activity. Activity1 là Activity ch y ban ñ u lúc kh i ñ ng ng d ng, cho phép nh p vào 1 giá tr , cho phép kh i ch y Activity2 và g i giá tr này t i Activity2. Activity2 s nh n và hi n th giá tr , r i l i g i giá tr này t i 1 BroadcastReceiver. Cơ ch g i và kh i ch y Activity s d ng thông qua Intent. B1: Kh i t o project: File -> New -> Android Project Project name: Explicit Intent Example Build Target: Ch n Android 1.5 Application name: Explicit Intent Example Package name: at.exam Create Activity: Activity1 => Kích nút Finish. B2: T o giao di n cho Activity1 -> res\layout\main.xml chuy n tên thành activity1_layout.xml Mã:
  3. android:layout_height="fill_parent" > Layout cho Activity1 bao g m 1 LinearLayout ch a 1 TextView, 1 EditText ñ nh p giá tr (ñã gi i h n ki u nh p là number), và 1 RelativeLayout có 1 Button ñ kh i ch y Activity2. Mình s d ng RelaytiveLayout ñ có th x p Button này xu ng phía cu i c a giao di n. B3: T o giao di n cho Activity2 -> Chu t ph i vào folder res\layout -> New -> Android XML File ->Gõ tên là activity2_layout.xml Mã:
  4. android:background="#333333" /> Layout c a Activity2 tương t như Activity1, nhưng Button bây gi là ñ g i BroadCast Receiver. Ngoài ra mình dùng EditText ñ hi n th value nh n ñư c (do nó có cái ñư ng bao ngoài ñ p hơn TextView ^_^) nên không cho phép nh p giá tr vào EditText này Mã: android:enabled="false" __________________ B4:S a l i n i dung c a Activity1.java như sau: Mã: package at.exam; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Activity1 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity1_layout); final EditText editValue = (EditText) findViewById(R.id.value_edit); www.Beenvn.com – T sách online
  5. final Button sendButton = (Button) findViewById(R.id.send_button); sendButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { String valueString = editValue.getText().toString(); long value; if (valueString != null) { value = Long.parseLong(valueString); } else { value = 0; } //T o 1 ñ i tư ng Bundle ñ g i ñi cùng Intent Bundle sendBundle = new Bundle(); sendBundle.putLong("value", value); //T o Intent ñ kh i ch y Activity2 và g n sendBundble vào Intent Intent i = new Intent(Activity1.this, Activity2.class); i.putExtras(sendBundle); startActivity(i); //Gi i phóng Activity1 kh i Activity Stack vì ta s ko quay l i nó n a finish(); } }); } } B5: T o m i 1 Class Activity2.java trong package at.exam -> ch nh s a n i dung: Mã: package at.exam; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Activity2 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity2_layout); www.Beenvn.com – T sách online
  6. final EditText receiveValueEdit = (EditText) findViewById(R.id.value_receive); final Button callReceiverButton = (Button) findViewById(R.id.call_button); //L y v Bundle ñư c g i kèm Intent r i l y ra giá tr Bundle receiveBundle = this.getIntent().getExtras(); final long receiveValue = receiveBundle.getLong("value"); receiveValueEdit.setText(String.valueOf(receiveValue)); callReceiverButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { //Kh i t o 1 Intent ñ g i t i BroadCast Receiver //G n giá tr vào Intent, l n này ko c n Bundle n a Intent i = new Intent(Activity2.this, Receiver.class); i.putExtra("new value", receiveValue - 10); sendBroadcast(i); } }); } } B6: T o BroadCast Receiver ñ nh n Intent mà Activity2 g i t i -> T o 1 file Receiver.java trong at.exam -> N i dung: Mã: package at.exam; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class Receiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { long value = intent.getLongExtra("new value", -10) + 10; Toast toast = Toast.makeText(context, "Broadcast Receiver catch an Intent" + " \n" + "The value is stored in the Intent is " + String.valueOf(value), Toast.LENGTH_LONG); toast.show(); } } Code không h khó hi u, và mình cũng ñã add comment. Ch c n lưu ý ñây là Toast là l p ñ hi n th m t thông báo ñơn gi n trong 1 kho ng th i gian c ñ nh, và ko th thay ñ i th i gian này T_T (why???) ch có th ch n gi a LENGTH_SHORT v i LENGTH_LONG www.Beenvn.com – T sách online
  7. B7: B sung thêm thông tin v component m i vào AndroidManifest.xml: Mã: www.Beenvn.com – T sách online
  8. www.Beenvn.com – T sách online
  9. www.Beenvn.com – T sách online
  10. ðã xong s d ng Explicit, gi ñ n lư t Implicit Intent. Trư c khi ñi vào ví d , hãy d o qua 1 chút ki n th c v Intent Filter và vai trò c a nó. Intent Filter là gì Activity, Service và BroadCast Receiver s d ng Intent Filter ñ thông báo cho h th ng bi t các d ng Implicit Intent mà nó có th x lý. Nói cách khác, Intent Filter là b l c Intent, ch cho nh ng Intent ñư c phép ñi qua nó. Intent Filter mô t kh năng c a component ñ nh nghĩa nó. Khi h th ng b t ñư c 1 Implicit Intent (ch ch a 1 s thông tin chung chung v action, data và category...), nó s s d ng nh ng thông tin trong Intent này, ki m tra ñ i chi u v i Intent Filter c a các component các ng d ng, sau ñó quy t ñ nh kh i ch y ng d ng nào thích h p nh t ñ x lý Intent b t ñư c. N u có 2 hay nhi u hơn ng d ng thích h p, ngư i dùng s ñư c l a ch n ng d ng mình mu n. VD: Mã: www.Beenvn.com – T sách online
  11. Trên là 1 Activity v i b l c Intent cho phép b t và x lý các Intent g i SMS. Hãy lưu ý t khóa Mã: andoid:scheme T khóa này cho bi t protocol (lu t) ñ x lý d li u trong URI. Nói 1 cách ñơn gi n thì nó là ki u c a d li u. 1 s ki u khác như http, https, fpt, content... Using Implicit Intent: Yêu c u: Xây d ng chương trình nh p s và g i. Lưu ý chương trình c a mình ñây ch xây d ng ñ n m c khi nh n nút Call c a di ñ ng thì s ch y ng d ng và hi n th giao di n cho phép nh p s . Ph n g i dành cho ai yêu thích tìm hi u thêm ^_^ Ph n này không h khó nhưng ñây mình ch mu n minh h a Implicit Intent nên s không ñưa vào. B1: Kh i t o project: File -> New -> Android Project Project name: Implicit Intent Example Build Target: Ch n Android 1.5 Application name: Implicit Intent Example Package name: at.exam Create Activity: Example => Kích nút Finish. B2: ðây là bư c quan tr ng nh t và cũng là bư c có ý nghĩa duy nh t trong c project này, các bư c còn l i ch là bư c râu ria mà mình thêm vào cho cái project nó ra h n 1 chút. Bư c này s thêm 1 b l c Intent Filter vào cho activity Example c a chúng ta ñ b t s ki n nh n nút Call c a di ñ ng -> Vào AndroidManifest.xml ch nh s a như sau: Mã: www.Beenvn.com – T sách online
  12. Th c ch t ch là b sung thêm dòng ch ñ mình ñánh d u thôi ^_^ B3: Xây d ng giao di n trong main.xml, bư c này ko quan tr ng, ch là râu ria cho activity có cái giao di n: Mã:
  13. android:layout_height="80px" android:gravity="center" android:text="3" android:textSize="25px" />
  14. android:id="@+id/button9" android:layout_width="80px" android:layout_height="80px" android:gravity="center" android:text="9" android:textSize="25px" /> LinearLayout ch a 1 TextView ñ hi n th s nh n, 1 TableLayout có các Button tương ng v i các s và 1 Button ñ clear cho TextView. B4: Code code code... So tired... Tutorial is really take time. Ch nh Example.java: Mã: package at.exam; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; www.Beenvn.com – T sách online
  15. public class Example extends Activity { Button button1, button2, button3; Button button4, button5, button6; Button button7, button8, button9; Button button0, buttonStar, buttonClear; TextView numberView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); numberView = (TextView) findViewById(R.id.number_display); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button3 = (Button) findViewById(R.id.button3); button4 = (Button) findViewById(R.id.button4); button5 = (Button) findViewById(R.id.button5); button6 = (Button) findViewById(R.id.button6); button7 = (Button) findViewById(R.id.button7); button8 = (Button) findViewById(R.id.button8); button9 = (Button) findViewById(R.id.button9); button0 = (Button) findViewById(R.id.button0); buttonStar = (Button) findViewById(R.id.button_star); buttonClear = (Button) findViewById(R.id.button_clear); button1.setOnClickListener(this.appendString("1")); button2.setOnClickListener(this.appendString("2")); button3.setOnClickListener(this.appendString("3")); button4.setOnClickListener(this.appendString("4")); button5.setOnClickListener(this.appendString("5")); button6.setOnClickListener(this.appendString("6")); button7.setOnClickListener(this.appendString("7")); button8.setOnClickListener(this.appendString("8")); button9.setOnClickListener(this.appendString("9")); button0.setOnClickListener(this.appendString("0")); buttonStar.setOnClickListener(this.appendString("*")); buttonClear = (Button) findViewById(R.id.button_clear); buttonClear.setOnClickListener(new OnClickListener() { public void onClick(View v) { numberView.setText(""); } }); } public OnClickListener appendString(final String number) { return new OnClickListener() { public void onClick(View arg0) { www.Beenvn.com – T sách online
  16. numberView.append(number); } }; } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, Menu.FIRST, 0,"Exit" ).setIcon(android.R.drawable.ic_delete); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST: { finish(); break; } } return false; } } Code quá ñơn gi n, mình còn ko thèm comment n a. Lưu ý có 1 Option Menu ñ ñóng Activity và cũng là ñóng luôn ng d ng. B5: Time to test... Kh i ch y project, r i s d ng Option Menu c a mình (b m nút Menu c a Emulator ho c di ñ ng Android) ñ thoát kh i chương trình. Ok, sau khi ch n Exit ta có th ch c ch n là ng d ng ñã ñư c ñóng hoàn toàn, activity ko còn t n t i trong stack c a Emulator/di ñ ng n a. Gi nh n nút Call c a Emulator/di ñ ng, Tadaaaaaaaaa www.Beenvn.com – T sách online
  17. www.Beenvn.com – T sách online
  18. www.Beenvn.com – T sách online
  19. www.Beenvn.com – T sách online
  20. K t thúc bài 4 www.Beenvn.com – T sách online
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
7=>1