Sử dụng Intent trong ứng dụng Android

Intent là một thành phần cơ bản trong ứng dụng Android. Không thể xây dựng ứng dụng Android mà không làm việc với Intents. Trong hướng dẫn này, mình sẽ hướng dẫn các bạn mới làm quen Android về Intent một cách cụ thể nhất.

Intent là gì

Trong một trận đấu bóng đá, đồng đội chuyền bóng xung quanh khu vực với mục đích đưa nó vào khung thành của đối phương. Bóng được phát động từ thủ môn của đội đến hậu vệ của họ. Tiếp theo, nó tìm đường đến các tiền vệ, và nếu mọi việc diễn ra theo kế hoạch, một trong những tiền đạo đưa nó vào lưới đối phương. Đó là giả sử thủ môn của phía bên kia đã không thể cản phá.

Trong Android, khả năng gửi tin nhắn đi xung quanh được thực hiện bởi đối tượng Intent. Với sự trợ giúp của Intents, các thành phần của Android có thể yêu cầu chức năng từ các thành phần khác. Khi bạn mở ứng dụng Instagram trên điện thoại của bạn và sử dụng nó để chụp ảnh, bạn chỉ cần sử dụng một Intent.

Intent cũng giúp liên lạc giữa các phần của một ứng dụng dễ dàng. Di chuyển từ một màn hình (Activity) sang một màn hình khác được thực hiện thông qua Intents.

Bạn hãy nhìn nhận theo cách này : tất cả các thành phần (ứng dụng và màn hình) của thiết bị Android đều bị cô lập. Cách duy nhất chúng giao tiếp với nhau là thông qua Intents.

Khởi chạy Activity thông qua Intents

Như đã đề cập trước đó, bạn có thể sử dụng Intents để khởi chạy các thành phần khác : activities, services, và broadcast receivers.

Để khởi chạy một Activity, bạn sẽ sử dụng phương thức startActivity(intent).

Đoạn code sau mô tả cách khởi chạy một Activity từ Intent.

Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class); 
 
startActivity(numbersIntent);

Đầu tiên, chúng ta tạo mới một đối tượng Intent và truyền vào nó tên class sẽ được khởi chạy NumbersActivity. Sau đó, chúng ta bắt đầu Activity sử dụng Intent đó.

Các loại Intent

Android hỗ trợ hai loại Intent : minh bạch và ngầm. Khi một ứng dụng định nghĩa thành phần đích của nó trong một Intent, đó là một Intent minh bạch. Khi ứng dụng không đặt tên cho một thành phần đích, đó là một Intent ngầm.

Intent minh bạch

Đoạn code nêu trên chính là ví dụ của Intent minh bạch. Chúng ra hãy xem lại một lần nữa :

Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class); 
 
startActivity(numbersIntent);

Ở đây, NumbersActivity là mục đích rõ ràng từ MainActivity. Điều này có nghĩa là NumbersActivity là thành phần được xác định sẽ được gọi bởi hệ thống Android. Điều quan trọng cần lưu ý (như trong ví dụ ở trên), các Intent minh bạch thường được sử dụng trong một ứng dụng, bởi vì nó cho phép nhà phát triển kiểm soát nhiều nhất về lớp nào sẽ được khởi chạy.

Intent ngầm

Đây là ví dụ về Intent ngầm :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://recruit.framgia.vn/"));
startActivity(intent);

Nếu bạn thực hiện đoạn code trên, ứng dụng của bạn sẽ khởi chạy một thành phần trình duyệt cho một URL nhất định thông qua Intent. Nhưng hệ thống Android xác định các thành phần có thể phản ứng với một Intent nhất định như thế nào?

Một thành phần có thể được đăng ký thông qua một Intent Filter cho một hành động cụ thể. Intent Filter có thể được đăng ký cho các thành phần tĩnh trong AndroidManifest.xml.

Đây là một ví dụ đăng ký một thành phần như là một trình duyệt web :

<activity android:name=".BrowserActivity"
          android:label="@string/app_name">
  <intent-filter>
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:scheme="http"/>
  </intent-filter>
</activity>