12/08/2018, 15:45

Introduce about Intent in Android

1. Khái niệm Intent là gì? Intent là một thành phần rất quan trọng trong lập trình android. Nó cho phép các thành phần app có thể request các methods từ các app android khác. Ví dụ: Một activity trong app này có thể khởi chạy một activity khác ở app bên ngoài để duyệt web. Intent là objects ...

1. Khái niệm Intent là gì? Intent là một thành phần rất quan trọng trong lập trình android. Nó cho phép các thành phần app có thể request các methods từ các app android khác. Ví dụ:

  • Một activity trong app này có thể khởi chạy một activity khác ở app bên ngoài để duyệt web. Intent là objects thuộc android.content.Intent. Intent được gửi đến hệ thống android để xác định hành động mà bạn mong muốn thực hiện, đối tượng bạn muốn xử lý. Từ đó hệ thống sẽ show các lựa chọn hoặc gọi chính xác các dịch vụ xử lý yêu cầu để đáp ứng. Intents có thể gửi kèm data thông qua Bundle. Bundle giống như một cái túi. Bên nhận sẽ mở bundle lấy ra dữ liệu thông qua các key.

Sau khi touch chọn Start Browser thì hệ thống sẽ show lên các lựa chọn có thể đáp ứng yêu cầu duyệt web của mình:

2. Khởi chạy một Activity Để khởi chạy một activity, ta sử dụng method startActivity(intent). Phương thức này được định nghĩa trong đối tượng context. Ví dụ:

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

Activity được khởi chạy bởi một activity khác được gọi là sub-activity

Ngoài ra chúng ta cũng có thể chạy services thông qua intents bằng cách dùng method startService(Intent)

3. Các loại Intent

  • Explicit intent: là loại intent rõ ràng, minh bạch. Nó chỉ định rõ các thành phần tham gia vào hành động (giống như ví dụ trên, Intent chỉ định rõ khởi chạy Activity A) hoặc hỏi hệ thống android để đánh giá các thành phần đã được đăng ký trên data của intent. Ví dụ:
Intent i = new Intent(this, ActivityA.class);
i.putExtra("Value1","This value 1 for Activity A");
i.putExtra("Value2","This value 2 for Activity A");
  • Implicit intent: là loại intent không rõ ràng, hay nói cách khác là intent ẩn. Nó chỉ rõ hành động cần được thực hiện và data đi kèm. Sau khi được gửi tới hệ thống android, nó sẽ tìm kiếm tất cả các thành phần đã được đăng ký cho các hành động cụ thể (thành phần tiếp nhận hành động đó) và kiểu data phù hợp. Nếu chỉ có một thành phần được tìm thấy, hệ thống android sẽ start thành phần này ngay lập tức. Nếu có nhiều hơn 1 thành phần được tìm thấy, hộp thoại lựa chọn được show ra và ta phải quyết định chọn thành phần nào được sử dụng. Ví dụ:
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.com"));
startActivity(i);

Đoạn code trên yêu cầu hệ thống android nó muốn duyệt trang web kia. Tất cả các trình duyệt web phải được đăng ký tương ứng vào dữ liệu intent thông qua bộ lọc intent.

4. Truyền data giữa các activities Để truyền data cho intent, ta dùng method ***putExtras()***. Extras là một cặp key/value trong đó key luôn luôn là kiểu string, value bạn có thể sử dụng kiểu data nguyên thủy hoặc đối tượng của String, Bundle, ....

Thành phần tiếp nhận có thể lấy được đối tượng intent thông qua method ***getIntent()***. Để lấy ra được data, tùy thuộc vào kiểu data chúng ta truyền đi, sử dụng các methods ***getStringExtra(), getIntExtra()***;

Ví dụ:

Intent intent = new Intent(MainActivity.this, ActivityB.class);
Intent.putExtra(“name”,”Tran Van Tuan B”);
 --------------------------------------------------------------------------------------------
Intent intent = getIntent();
String fullName = intent.getStringExtra(“name”);
// fullName = “Tran Van Tuan B”

Ngoài ra có rất nhiều app android cho phép bạn chia sẻ data với những người khác, ví dụ: facebook, Gmail... Bạn có thể gửi dữ liệu tới một vài thành phần nào đó. Ví dụ:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT,"I miss you!");
startActivity(intent);

Ở trên ta định nghĩa gửi đi 1 intent với action send, hệ thống sẽ tìm toàn bộ các app đăng ký hành động đó và show cho chúng ta lựa chọn.

Các bạn đã thấy sự thú vị về android chưa?             </div>
            
            <div class=

0