action intent – Nguyễn Khoa Ninh

Intent được chia thành hai loại chính là Explicit Intent và Implicit Intent:

+ ExplicitIntent: là loại intent được khai báo tường minh các thành phần sẽ nhận và xử lý intent, các khai báo được xây dựng qua các phương thức setComponent hoặc setClass(context, Class). Loại Intent này chính là nội dung của 4 bài trước về Intent. Loại này thường được sử dụng để mở và trao đổi dữ liệu cho các Activity, Service,… trong cùng một ứng dụng.

Ví dụ:

Intent intent = new Intent(MainActivity.this, ChildActivity.class);
intent.putExtra("Data", value);
startActivity(intent);

+ Implicit Intent: là loại Intent có các Action được Android xây dựng sẵn, nó không chỉ rõ các Component xử lý (các class xử lý) mà nó sẽ cung cấp cho hệ điều hành một loạt các thông tin yêu cầu sau đó hệ điều hành sẽ đối chiếu xem trong hệ thống có bao nhiêu phần mềm khác có thể đáp ứng xử lý yêu cầu này rồi hiện ra một Dialog chứa tên của các phần mềm có thể xử lý để người dùng chọn. Nếu các phần mềm có thể xử lý thông tin chỉ có 1 thì nó sẽ được chạy luôn không qua bước hiển thị chọn phần mềm.

 Screenshot_2014-07-09-15-34-12  Screenshot_2014-07-09-15-33-56

 

Ví dụ như ở hai hình trên, người dùng ấn vào đường link trong tin nhắn, sau khi ấn phần mềm nhắn tin sẽ hiểu là bạn đang ấn vào đường link và cung cấp một loạt các thông tin cần thiết cho hệ thống, hệ thống dựa vào thông tin đó sẽ chọn lựa và đưa ra được hai phần mềm có thể sử dụng là Internet và Chrome.

Để hiểu xâu và rõ hơn về Implicit Intent ta sẽ đi làm một ví dụ cụ thể với hai chức năng là mở một đường link và gọi điện tới một số.

Screenshot_2014-07-09-16-08-42

Trước hết là cứ down code mẫu về rồi chạy và dùng thử xem nó thế nào đã :):

https://www.dropbox.com/sh/n63qjt6bbohadx9/AABGCnjjOOTTG62lbgtIpDhBa

Mấu chốt của chương trình chỉ là ở đoạn code này thôi:
Code dùng cho mở một đường link

// Uri được dùng để xác định các giá trị dữ liệu
Uri uri = Uri.parse("https://nguyenkhoaninh.wordpress.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri );
startActivity(intent);

Vì đây là xem một trang web nên đoạn code này ta sử dụng ActionView

Code dùng để gọi tới số 900

Uri uri = Uri.parse("tel:" + "900");
Intent intent = new Intent(Intent.ACTION_CALL, uri);
// Để có thể call được thì trong AndroidMaintifest.xml phải khai báo
// <uses-permission android:name="android.permission.CALL_PHONE" />
startActivity(intent);

Đoạn code này thì ta sử dụng ActionCall là vì ta sẽ mở chương trình gọi điện.
Các bạn có thể xem các Action mà Android định nghĩa sẵn ở đây:
http://developer.android.com/reference/android/content/Intent.html

Các bạn thấy hai đoạn code trên có sử dụng đối tượng Uri, đối tượng này được dùng để nạp dữ liệu theo chuẩn RFC 3986.
Bảng dưới đây liệt kê một số định dạng và action tương ứng đã được định nghĩa sẵn:

Screenshot from 2014-07-09 16:33:59