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

pdf 39 trang Gia Huy 17/05/2022 3230
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", để 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

  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 2
  3. Nội dung 1. Giới thiệu về intent 2. Intent tường minh vs ngầm định 3. Các thành phần của intent ▪ Action & Data ▪ Category ▪ Type ▪ Component ▪ Extras 4. Sử dụng intent để trao đổi dữ liệu 5. Intent filter 3
  4. Phần 1 Giới thiệu về intent 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) 5
  6. Phần 2 Intent tường minh vs ngầm định 16
  7. 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 17
  8. 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 19
  9. Intent ngầm định (implicit) Một số trường hợp sử dụng implicit intent 20
  10. Các action được định nghĩa sẵn 21
  11. Phần 5 Các thành phần của intent 22
  12. Các thành phần của Intent 23
  13. 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 24
  14. 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) 25
  15. Ví dụ sử dụng Intent Intent x = new Intent(this, Login.class); x.putExtra("loginname","abcxyz"); startActivity(x); Mở activity Login với dữ liệu gửi kèm loginname là abcxyz 6
  16. Ví dụ sử dụng Intent Mở trang web www.tdu.edu.vn 6
  17. Ví dụ sử dụng Intent Mở activity quay số với số 0912102165 điền sẵn 6
  18. Dùng Intent và nhận dữ liệu trả về • Thảo luận với một ví dụ sau: Tạo một ứng dụng chụp ảnh: 1. Giao diện gồm một nút lệnh và imageView 2. Khi ấn nút lệnh → gọi đến giao diện camera 3. Tại giao diện camera → chụp ảnh → hoàn tất 4. Trở lại giao diện đầu → imageView hiển thị ảnh chụp được bên camera 7
  19. Dùng Intent và nhận dữ liệu trả về Giao diện camera được gọi Giao diện cần thiết kế 7 khi ấn nút chụp hình
  20. Dùng Intent và nhận dữ liệu trả về ImageView hiển thị ảnh Chụp ảnh xong 7 chụp được
  21. Dùng Intent và nhận dữ liệu trả về ImageView hiển thị ảnh Chụp ảnh xong 7 chụp được
  22. Dùng Intent và nhận dữ liệu trả về Ánh xạ nút lệnh chụp ảnh và hiển thị hình ảnh Hàm openCamera(): tạo một intent gọi đến ứng dụng camera startActivityForResult(): thực hiện Intent & có đợi kết quả trả về RQC: RequestCode mã số yêu cầu – phân biệt kết quả trả về giữa các activity 7
  23. Dùng Intent và nhận dữ liệu trả về Xử lý việc nhận kết quả trả về thông qua phương thức onActivityResult() của Activity, có 3 tham số: - requestCode: mã số yêu cầu (được gửi đi khi thực hiện intent) - resultCode: mã số kết quả (có giá trị RESULT_OK: yêu cầu được hoàn tất) - data: nhận dữ liệu trả về - tại đây data chứa dữ liệu của hình được chụp từ camera Khi tất cả các tham số hợp lệ → thực hiện dựng hình bitmap từ data → hiển thị hình ra ImageView 7
  24. Phần 2 Sử dụng intent để trao đổi dữ liệu 8
  25. 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 9
  26. 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 10
  27. Thảo luận 12
  28. Tại ActivityMain
  29. Sự kiện click của nút lệnh chỉnh sửa gọi đến hàm OpenEdit() Hàm OpenEdit() thực hiện mở EditActivity, gửi nội dung trên tvNote và có yêu cầu kết quả trả về 12
  30. Hàm onActivityResult() xử lý kết quả trả về từ EditActivity • onActivityResult() đây là hàm có sẵn trong activity • REQUEST_CODE_EDIT tham số toàn cục tự khai báo • RESULT_OK hằng số có sẵn 12
  31. Tại EditActivity
  32. Hàm getData() – đặt vào onCreate của activity thực hiện lấy dữ liệu gửi đến và hiển thị lên edtEdit Xử lý sự kiện click cho nút HỦY 12
  33. Xử lý sự kiện click cho nút LƯU 12
  34. Quay lại ứng dụng UocChung – thực hiện việc trả kết quả về cho activity nhập dữ liệu sau khi tính xong giá trị ước chung và bội chung 12
  35. Phần 3 Intent filter 13
  36. Intent filter (bộ lọc intent) • Là thành phần giúp cho hệ thống Android biết được ứng dụng của bạn có thể làm được những 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 intent mà nó có thể xử lý 14
  37. Intent filter (bộ lọc intent) • 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: mô tả hành động sẽ thực hiện. Ở đây nó mô tả ứng dụng của tôi sẽ xử lý các hành động liên quan tới gửi dữ liệu – Category của intent: mặc định – data: thẻ này nói rõ hơn cho hệ thống biết là tôi chỉ nhận những hành động liên quan tới gửi tin nhắn sms. Thuộc tính scheme có thể nhận các giá trị như: http, https, ftp, content, 14