Tìm hiểu về Intent trong lập trình Android

(ZmikiSoft.com) – Tìm hiểu về Intent trong lập trình Android.
Một Intent là một đối tượng thông báo, bạn có thể sử dụng để yêu cầu một hành động từ một thành phần của ứng dụng khác. Mặc dù Intent được sử dụng để giao tiếp giữa các thành phần ứng dụng bằng nhiều cách, nhưng có 3 cách cơ bản thường sử dụng:

  • Starting an activity

Một activity là đại diện của một màn hình riêng trong ứng dụng. Chúng ta có thể chạy một activity bằng cách sử dụng một Intent để startActivity. Intent mô tả activity để start và mang thêm những dữ liệu cần thiết.

Nếu bạn muốn nhận một kết quả từ activity khi nó chạy xong, có thể gọi startActivittyForResult(). Activity của bạn sẽ nhận một kết quả như một đối tượng Intent riêng khi onActivityResult trả lại.

  • Starting a service

Một service là một thành phần, thực hiện các chức năng chạy ngầm mà không cần giao diện. Từ Android 5.0 trở đi chúng ta có thể start một service bằng JobScheduler. Với các phiên bản Android thấp hơn, có thể start service bằng cách sử dụng phương thức trong lớp cha Service. Để start một service chúng ta sử dụng một Intent để startService().

  • Delivering a broadcast

Một broadcast là một tin nhắn ( message ) mà bất kỳ ứng dụng Android nào cũng có thể nhận. Có nhiều dạng broadcast mà hệ thống có thể sử dụng cho các sự kiện. Ví dụ: khi hệ thống khởi động, hoặc sạc pin hệ thống sẽ dùng broadcast để gửi tin nhắn cho người dùng biết hành động nào đang được thực hiện. Để sử dụng chúng ta tạo một đối tượng Intent và gọi thực thi thông qua phương thức sendBroadcast() hoặc sendOrderdBroadcast().

++ CÁC KIỂU INTENT (có 2 loại chính)

  • Explicit intents (tạm hiểu là intent rõ ràng): Explicit Intent xác định thành phần để khởi chạy ( start ) bằng tên của nó. Bạn sẽ sử dụng một explicit intent để khởi chạy một thành phần trong ứng dụng của bạn, dựa theo tên của Class (Activity hoặc service) bạn muốn chạy. Ví dụ bạn có thể start một service để download file từ internet chạy ngầm.
  • Implicit intents ( tạm hiểu là intent không rõ ràng ): Implicit Intent khác với explicit intent là nó không được đặt tên cho thành phần ( activity hoặc service ) một cách rõ ràng. Thay vào đó bạn có thể khai báo một hành động chung chung để thực thi. Ví dụ: bạn muốn hiện thị vị trí trên bản đồ, bạn có thể sử dụng một implicit intent để yêu cầu một ứng dụng khác làm việc này.

Khi bạn tạo một implicit intent ( intent không rõ ràng ), hệ điều hành Android sẽ tìm các thành phần tương đương để khởi chạy bằng cách so sánh nội dung của Intent (bạn khởi chạy ) với intent filter được khai báo trong manifest của các ứng dụng khác trên thiết bị. Nếu intent bạn khởi chạy thích hợp với một intent filter. Hệ thống sẽ khởi tạo thành phần đó và thực thi đối tượng Intent, nhưng nếu có nhiều intent filter phù hợp thì hệ thống sẽ thông báo một dialog hiện thị nhiều thành phần để bạn lựa chọn. Ví dụ: khi bạn click vào một link web trên ứng dụng Android để mở web ( nếu trong thiết bị của bạn có cài chrome, firefox ) thì hệ điều hành sẽ hiện thị một dialog để bạn chọn muốn mở link bằng trình duyệt nào.

=> Intent filter: là một biểu hiện trong file manifest của ứng dụng ( được khai báo trong file manifest của ứng dụng ). Ví dụ: khi khai báo intent filter cho một activity là bạn đã tạo cho activity đó của bạn một khả năng mà các ứng dụng khác có thể gọi lúc cần thiết. Chỉ cần ứng dụng khác gọi start Intent đúng với filter bạn đã khai báo. Nhưng nếu không khai báo filter cho activity thì nó chỉ được khởi chạy với một explicit intent.

=> Lưu ý: theo Google thông báo để sử dụng an toàn cho ứng dụng của bạn, nên luôn luôn sử dụng explicit intent khi khởi chạy service và không khai báo filter cho service của bạn. Việc sử dụng implicit service để khởi chạy là không an toàn bởi vì bạn sẽ không biết service nào sẽ phản hồi về intent, và người dùng không thể biết service khởi chạy cái gì. Từ phiên bản Android 5.0 trở đi, hệ thống sẽ ném một exception nếu bạn gọi hàm bindService() với một implicit Intent.

Trong bài tiếp theo chúng ta sẽ tìm hiểu sâu hơn về các thành phần Intent.

Khóa học lập trình Android
Khóa học lập trình Java
Khóa học lập trình iOS
Khóa học lập trình Objective-C/Swift