Có những loại intent nào trong android?

Intents là một thành phần quan trọng trong android. Nó cho phép các thành phần ứng dụng có thể yêu cầu các hàm từ các thành phần ứng dụng android khác. Ví dụ một activity có thể chạy một activity khác ở bên ngoài để chụp ảnh.

Intents là một objects của android.content.Intent. Intents sẽ được gửi đến hệ thống android để xác định hành động bạn muốn thực hiện, đối tượng bạn muốn xử lý.

Intents có thể bao gồm dữ liệu thông qua Bundle. Bundle giống như một cái hộp. Bên nhận sẽ mở bundle ra nhờ key và lấy ra dữ liệu

Có những loại intent nào trong android?

Để chạy một activity,  broadcast receivers , sử dụng phương thức startActivity(intent). Phương thức này được định nghĩa trong đối tượng context. Xem ví dụ dưới đây

Intent i = new Intent(this, ActivityTow.class); startActivity(i);

Android intents thường được sử dụng chính:

  • Start dịch vụ
  • Gọi một activity
  • Hiển thị một trang web
  • Hiển thị danh sách liên hệ
  • Gởi một tin nhắn
  • Gọi điện thoại.

Các loại intent 

Có 2 loại intent trong Android:  implicit và explicit. 
 

Đối tượng dữ liệu trong Intent Đối tượng dữ liệu của Intent là một cấu trúc dữ liệu được dùng bởi các component trong ứng dụng hoặc hệ thống nhận được và có những xử lý thích hợp.

Đối tượng dữ liệu của Intent có thể chứa các thuộc tính sau dựa vào cách mà các component muốn tương tác hoặc thực hiện một tác vụ thích hợp:

Các thuộc tính chính

  • Action
    • Tên của các action mà Intent sẽ được thực hiện.
    • Action có thể được định nghĩa sẵn Android cung cấp hoặc do người lập trình tự định nghĩa cho riêng ứng dụng (như dùng trong BroadcastReceiver, sẽ giới thiệu trong bài tiếp theo).
  • Data
    • Dữ liệu mà thành phần được gọi (activity, service,…) sẽ xử lý.
    • Được định dạng là đối tượng URI (tham khảo class Uri class).
    • Data truyền vào sẽ được xử lý và hành động tùy theo theo “the MIME type” mà dữ liệu sử dụng, bạn có thể tham khảo tại link.

Các thuộc tính tùy chọn

  • Category
    • Là chuỗi ký tự chứa thông tin về nhóm phân loại các đối tường để xử lý các intent.
    • Có 2 category thông dụng thường được thấy trong các file manifest:
      • CATEGORY_BROWSABLE: Cho phép start một activity bằng Web browser để hiện thị dữ liệu định dạng là một liên kết ví dụ như một e-mail hay một bức hình trên mạng.
      • CATEGORY_LAUNCHER: Khai báo để chỉ định activity sẽ được start khi bắt đầu mở ứng dụng.
  • Extras
    • Chứa tất cả các cặp key-value pairs chứa các thông tin dữ liệu bổ sung truyền qua.
    • Thông số extras sẽ được gán và đọc bằng phương thức putExtras()/getExtras() methods tương ứng với thông số là đối tượng có cấu trúc Bundle.
  • Flags
    • Những giá trị của flag này sẽ hướng dẫn có hệ thống Android cách để start một activity và kết thúc một activity. Để hiểu rõ hơn, bạn có thể tham khảo thêm tại link.

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.

Ví dụ chúng ta thiết lập  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 android:scheme="sms"

Ở các bài CÁC THÀNH PHẦN GIAO DIỆN CƠ BẢN, chúng ta đã cùng nhau tìm hiểu về:

  • View.
  • ViewGroup.
  • Drawables.
  • Cách đổ View vào Activity.

Và ở bài học hôm nay, chúng ta sẽ cùng tìm hiểu về Intent và Manifest. Do tính chất của 2 khái niệm này dày đặc lý thuyết, ít hình vẽ (ít chứ không phải không có), mình sẽ cố gắng đưa ra nhiều hình minh họa nhất có thể. Bù lại, nội dung của bài khá ngắn, dễ đọc.

Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

  • Cấu trúc của một project Android.
  • Cách mở / import một project Android bằng Android Studio.

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Intent là gì? Chúng được sử dụng ra sao?
  • Manifest là gì? Những thành phần trong file Manifest?

Truyền thuyết về Intent

Ngày xửa ngày xưa, khi chế tạo ra Android, các nhà khoa học đã nghĩ về một hình thức truyền dữ liệu giữa các màn hình (Activity), tiến trình ngầm (Service) hay các Broadcast Receiver.

Nếu như trong lập trình iOS hay Windows Phone, chúng ta muốn nhập một ký tự bất kỳ ở màn hình thứ nhất, nhấn nút, sang màn hình thứ 2 hiển thị đúng ký tự đó thì:

  • Truyền dữ liệu thẳng vào URL dạng bbb://v=1&c=2
  • Rồi sau đó ở màn hình thứ 2, lấy dữ liệu ra với key bằng vc tương ứng.

Thì trong Android, mọi thứ hoàn toàn khác: Những dữ liệu được đưa vào một đối tượng thuộc lớp Bundle. Và đối tượng bundle này được chứa trong Intent.

Ví dụ: Ở một màn hình A, bạn kích hoạt chức năng chụp ảnh (tức là màn hình B), chụp xong bạn lấy ảnh về màn hình A. Lúc này Intent chính là:

  • Hành động kích hoạt chức năng chụp ảnh.
  • Hoạt động quay trở về màn hình A sau khi chụp.

Có những loại intent nào trong android?

Như vậy, không chỉ là chuyển qua chuyển lại giữa các màn hình, Intent còn mang theo dữ liệu giữa các màn hình đó, khiến việc chuyển đổi trở nên đa nhiệm, linh hoạt hơn.

Sau đây là các trường hợp chúng ta có thể sử dụng Intent. Các trường hợp này trong quá trình làm việc bây giờ lẫn về sau, các bạn sẽ sử dụng rất thường xuyên:

Đơn giản là để khởi chạy một activity khác

Để chuyển sang một Activity B từ Activity A, các bạn gọi phương thức startActivity(intent) của Activity đó.

Quay trở lại với Project HelloWorld mà chúng ta đã làm từ bài 1 đến bài 4 trước đó. Lần này ta sẽ tạo một Activity mới và thực hành:

  • Tạo một Activity mới, rỗng, bằng cách chuột phải vào module “app” ở cột Project bên trái, chọn New > Activity > Empty Activity:

Có những loại intent nào trong android?

  • Ta đặt tên cho nó là SecondActivity, và Android Studio sẽ tự động sinh ra file layout xml cho nó, sau khi hoàn thành bước này chúng ta sẽ có 2 file là activity_second.xmlSecondActivity.java:

Có những loại intent nào trong android?

  • Để tiện phân biệt với MainActivity, chúng ta sẽ đặt màu cho SecondActivity là màu đen bằng cách thêm thuộc tính android:background trong file activity_second.xml như sau (phần tô vàng là phần thêm vào):

Trong file activity_main.xml, xóa hết các thành phần bên trong FrameLayout, chỉ để lại một Button với code như sau:

activity_main.xml