Bài giảng Lập trình di động - Bài 5: Intent và cơ chế trao đổi dữ liệu giữa các thành phần trong Android - Trương Xuân Nam

pdf 25 trang ngocly 25/05/2021 870
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình di động - Bài 5: Intent và cơ chế trao đổi dữ liệu giữa các thành phần trong Android - Trương Xuân Nam", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_di_dong_bai_5_intent_va_co_che_trao_doi.pdf

Nội dung text: Bài giảng Lập trình di động - Bài 5: Intent và cơ chế trao đổi dữ liệu giữa các thành phần trong Android - Trương Xuân Nam

  1. LẬP TRÌNH DI ĐỘNG Bài 5: Intent và cơ chế trao đổi dữ liệu giữa các thành phần trong android
  2. Nhắc lại bài trước . Các điều khiển hữu ích: ProgressBar, Progress Dialog, AutoComplete TextView, TimePicker, TimePicker Dialog, DatePicker, DatePicker Dialog, ListView, Spinner, WebView . Quá trình xây dựng giao diện: 1. Thiết lập giao diện trong XML 2. Cái nào không dùng XML được thì viết trong onCreate 3. Thiết lập dữ liệu cho điều khiển 4. Viết các hàm xử lý sự kiện cho điều khiển . Vài kiểu viết mã xử lý sự kiện TRƯƠNG XUÂN NAM 2
  3. Nội dung 1. Giới thiệu về intent 2. Sử dụng intent để trao đổi dữ liệu 3. Intent filter 4. Intent tường minh vs ngầm định 5. Các thành phần của intent . Action & Data . Category . Type . Component . Extras TRƯƠNG XUÂN NAM 3
  4. Phần 1 Giới thiệu về intent TRƯƠNG XUÂN NAM 4
  5. Intent & Intent Service . Intent là chuẩn giao tiếp giữa các thành phần trong Android OS (activity, service, provider, receiver) . Intent service là dịch vụ hệ thống, vai trò như người đưa thư: chuyển intent tới thành phần nhận phù hợp nhất (chiếu theo địa chỉ ghi trong intent) . Intent giống một lá thư: các thông tin cần thiết được đóng gói bên trong một intent (địa chỉ + nội dung) TRƯƠNG XUÂN NAM 5
  6. Ví dụ sử dụng Intent Intent x = new Intent(this, Login.class); mở activity x.putExtra("loginname", "abcxyz"); startActivity(x); Login với dữ liệu gửi kèm Intent i = new Intent(Intent.ACTION_VIEW); loginname là i.setData(Uri.parse(" ")); startActivity(i); abcxyz mở trang web txnam.net mở activity quay số với số 0912102165 điền sẵn Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:0912102165")); startActivity(dialIntent); TRƯƠNG XUÂN NAM 6
  7. Dùng Intent và nhận dữ liệu trả về bật ứng dụng camera chụp ảnh và trả về ảnh chụp TRƯƠNG XUÂN NAM 7
  8. Phần 2 Sử dụng intent để trao đổi dữ liệu TRƯƠNG XUÂN NAM 8
  9. Trao đổi intent giữa các activity . Dữ liệu được đóng gói vào intent . Lựa chọn dữ liệu đưa vào intent phù hợp . Có chuẩn trao đổi dữ liệu chung để dễ xử lý . Sau đó gọi activity phù hợp để xử lý . startActivity(myIntent); . Nếu muốn nhận kết quả trả về thì dùng . startActivityForResult(myIntent, CODE); . Trong đó CODE là một số nguyên, dùng để phân biệt kết quả trả về giữa các activity khác nhau . Xử lý bằng cách viết lại hàm onActivityResult TRƯƠNG XUÂN NAM 9
  10. Trao đổi intent giữa các activity . Về phía bên activity nhận, lấy intent gửi cho mình bằng getIntent() . Nếu cần trả về kết quả nào đó cho activity trước . Thông báo thất bại: setResult(RESULT_CANCELED); . Thông báo thành công: setResult(RESULT_OK, x); • Với x là intent mà sẽ trả ngược lại cho activity gọi • Cần đưa dữ liệu vào x trước khi setResult • Việc đưa dữ liệu sử dụng các hàm putExtra) . Chú ý trường hợp dữ liệu phức tạp: putSerializable TRƯƠNG XUÂN NAM 10
  11. Đoạn mã minh họa việc gọi activity nhập liệu và xử lý kết quả trả về onActivityResult: được tự động gọi khi activity nhập liệu kết thúc TRƯƠNG XUÂN NAM 11
  12. Xử lý ở phía activity nhập liệu Dùng setResult để thiết lập dữ liệu trả về cho activity cha TRƯƠNG XUÂN NAM 12
  13. Phần 3 Intent filter TRƯƠNG XUÂN NAM 13
  14. Intent filter (bộ lọc intent) . Activity, Service và Broadcast receiver sử dụng intent filter để thông báo cho hệ thống biết các dạng intent mà nó có thể xử lý . Phân giải intent (intent resolution): khi nhận được một intent, hệ thống tiến hành chọn activity phù hợp nhất với intent đó theo ưu tiên sau . Action trong intent . Chuỗi tham số (URI trong phần data) . Category của intent TRƯƠNG XUÂN NAM 14
  15. Intent filter (bộ lọc intent) Đoạn mã XML trên đăng kí với hệ thống một activity “lắng nghe” việc người dùng muốn thực hiện cuộc gọi bằng cách chỉ định thuộc tính action trong intent-filter TRƯƠNG XUÂN NAM 15
  16. Phần 4 Intent tường minh vs ngầm định TRƯƠNG XUÂN NAM 16
  17. Intent tường minh (explicit) . Sử dụng thành phần component để chỉ định rõ đối tượng sẽ thực thi . Sử dụng phương thức: . setComponent(ComponentName) . setClass(Context, Class) . setClassName(Context, String) . setClassName(string, string) . Chỉ được dùng để gọi các activity trong cùng một ứng dụng . Dữ liệu trao đổi nên chuyển vào phần extras TRƯƠNG XUÂN NAM 17
  18. Intent tường minh (explicit) Intent intent = new Intent(); intent.setClassName("ten_package", "ten_class"); // chuẩn bị dữ liệu trước khi gửi startActivity(intent); Hoặc Intent i = new Intent(this, Activity2.class); // chuẩn bị dữ liệu trước khi gửi startActivity(intent); TRƯƠNG XUÂN NAM 18
  19. Intent ngầm định (implicit) . Dùng các thành phần action, category, . Hệ thống tự động xác định đối tượng phù hợp nhất để đáp ứng với Intent đó (theo nguyên tắc “phân giải intent” đã trình bày ở slide 14) . Dùng để giao tiếp với các dịch vụ hệ thống hoặc dịch vụ do bên thứ ba cung cấp: . Gọi activity: startActivity / startActivityForResult . Gọi service: startService / bindService . Gửi boardcast: sendBoardcast / sendOrderedBoardcast / setStickyBoardcast TRƯƠNG XUÂN NAM 19
  20. Intent ngầm định (implicit) Một số trường hợp sử dụng implicit intent TRƯƠNG XUÂN NAM 20
  21. Các action được định nghĩa sẵn TRƯƠNG XUÂN NAM 21
  22. Phần 5 Các thành phần của intent TRƯƠNG XUÂN NAM 22
  23. Các thành phần của Intent TRƯƠNG XUÂN NAM 23
  24. Các thành phần của Intent . Component name: tên class xử lí intent (ví dụ: “com.example.project.app.MyActivity1”) . Action: tên các hành động mà intent yêu cầu thực hiện (ví dụ: action_view, action_call, ) . Data: dữ liệu yêu cầu được xử lí, dữ liệu này thường được biểu diễn dưới dạng URI (ví dụ: "tel:216-555-1234", " ", ) . Trường hợp dữ liệu phức tạp hoặc không cố định, người ta thường đẩy vào phần extras TRƯƠNG XUÂN NAM 24
  25. Các thành phần của Intent . Type: định dạng kiểu dữ liệu của data (dùng chuẩn MIME), thường được tự xác định bởi hệ thống . Category: bổ sung thông tin cho các action của intent (ví dụ: nếu một activity có thuộc tính category là CATEGORY_LAUNCHER nghĩa là activity đó có thể khởi chạy cấp ứng dụng) . Extras: dữ liệu bổ sung nếu vùng Data là chưa đủ, extras sử dụng cấu trúc bundle gồm các cặp (key, value) TRƯƠNG XUÂN NAM 25