Cách sử dụng intent trong android

Trong Android, Intent là những tin nhắn không đồng bộ cho phép các component của ứng dụng (như activities, services, broadcast receivers và content providers) yêu cầu chức năng từ một component khác.

Cách sử dụng intent trong android

Cách sử dụng intent trong android

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Intents sẽ giúp tương tác giữa các component từ cùng một ứng dụng cũng như với các component của ứng dụng khác.

Intent là đối tượng của lớp android.content.Intent và intent chủ yếu hữu ích để thực hiện những việc sau.

Component Mô tả
Bắt đầu một Activity Khi dùng một đối tượng Intent thông qua phương thức startActivity(), chúng ta có thể bắt đầu một Activity mới hoặc Activity hiện có.
Bắt đầu một Service Khi dùng một đối tượng Intent thông qua phương thức startService(), chúng ta có thể bắt đầu một Service mới hoặc gửi các hướng dẫn đến một Service hiện có.
Truyền đi một Broadcast Khi dùng một đối tượng Intent thông qua phương thức sendBroadcast() , chúng ta có thể gửi tin nhắn đến các broadcast receiver khác.

2. Xây dựng một đối tượng Intent

Đối tượng Intent chứa thông tin cần thiết để xác định component nào sẽ bắt đầu và hành động nào được thực hiện bởi component nhận.

Bài viết này được đăng tại [free tuts .net]

Các đối tượng Intent giúp đỡ hệ thống android biết được component nào nên bắt đầu bằng các đặc tính sau

Component name

Nó xác định tên của component bắt đầu và hệ thống android sẽ chuyển intent đến các component cụ thể được xác định bởi component name. Trong trường hợp không xác định component name thì hệ thống Android sẽ quyết định component nào nhận được intent dựa trên thông tin intent khác như action, data, v.v.

Trong Android, có thể chỉ định component name bằng cách sử dụng tên lớp của component đích và tên package, ví dụ com.tutlane.sampleActivity. Có thể thiết lập component name bằng cách sử dụng setComponent(), setClass(), setClassName()hoặc sử dụng Intent constructor(phương thức khởi tạo).

Action

Nó xác định tên của action mà Intent được thực hiện. Sau đây là một số action phổ biến để bắt đầu một activity.

Action Mô tả
ACTION_VIEW Sử dụng với phương thức startActivity() khi có thông tin một activity có thể hiển thị cho người dùng.
ACTION_SEND Sử dụng với phương thức startActivity() khi có một số dữ liệu người dùng có thể chia sẻ thông qua một ứng dụng khác như ứng dụng email, ứng dụng chia sẻ mạng xã hội.

Chúng ta có thể chỉ định tên action của một intent bằng cách sử dụng setAction() hoặc một Intent constructor.

Data

Data xác định loại dữ liệu dùng cho intent filter. Khi tạo ra một intent, điều quan trọng là chỉ định loại dữ liệu (loại MIME) và URI của nó. Bằng cách chỉ định loại dữ liệu MIME, nó giúp hệ thống Android quyết định Component tốt nhất để nhận intent .

Category

Category Android là một tùy chọn cho intent và nó chỉ định thông tin bổ sung về loại Component sẽ xử lý một intent.

Ta có thể chỉ định một category cho một intent bằng cách sử dụng addCategory().

Các thuộc tính trên (Component Name, Action, Data and Category) sẽ đại diện cho các đặc điểm của một intent. Từ các thuộc tính này, hệ thống Android sẽ dễ dàng quyết định Component nào sẽ bắt đầu.

3. Các loại intent

Có hai loại intent có sẵn trong Android, đó là Implicit Intents Explicit Intents.

Cách sử dụng intent trong android

Đây là cách sử dụng intent trong các ứng dụng Android để gọi component cần thiết dựa trên yêu cầu .

Cách sử dụng intent 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ách sử dụng intent trong android

2. Chạy một Activity

Để chạy một activity, 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);

Activitys mà được khởi chạy bởi một activitys khác thì gọi là sub-activityes

Ngoài lề: Bạn cũng có thể chạy services thông qua intents. Sử dụng hàm startService(Intent)

3. explicit intents và implicit intents

3.1. explicit intents

explicit intents dịch word by word thì có nghĩa là intent rõ ràng. Các bạn hiểu đơn giản explicit intents xác định rõ, cụ thể các thành phần tham gia hành động (giống như ví dụ phần 2, nó chỉ rõ intent này dùng để start ActivityTow.class) hoặc hỏi hệ thống android để ước lượng, đánh giá các thành phần đã được đăng ký trên dữ liệu của intent

explicit intents xác định một cách rõ ràng các thành phần sẽ được gọi bởi hệ thống android. Ví dụ dưới đây sẽ cho bạn biết làm thế nào để khởi tạo một intents rõ ràng và gửi nó đến hệ thống android để chạy một activity

Intent i = new Intent(this,ActivityTow.class); i.putExtra("Value1","This value one for ActivityTow"); i.putExtra("Value2","This value tow for ActivityTow");

3.2. implicit intents

Intents ẩn chỉ rõ hành động cần được thực hiệndữ liệu cho hành động. Nếu một intents ẩn được gửi đến 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 dùng để start cái hành động đó) và kiểu dữ liệu 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ó một vài thành phần được tìm thấy. Người dùng sẽ nhận được hộp thoại lựa chọn và phải quyết đinh thành phần nào được sử dụng cho intents.

Ví dụ, đoạn code dưới đây sẽ yêu cầu hệ thống android để xem một trang web.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

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.vogella.com")); startActivity(i);

4. Truyền dữ liệu giữa các activities

4.1. Truyền dữ liệu đến thành phần đích

Để truyền dữ liệu cho intent, ta dùng phương thức putExtras(). Xem vi dụ phần 3.1 Extras là một cặp key/value. key luôn luôn là kiểu string. value bạn có thể sử dụng kiểu dữ liệu 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 lại được đối tượng intent thông qua hàm getIntent(). Để lấy ra được dữ liệu, tùy thuộc vào kiểu dữ liệu chúng ta truyền đi, sử dụng các phương thức getStringExtra(), getIntExtra();

Ví dụ:

Intent intent = new Intent(MainActivity.this, Main2Activity.class); Intent.putExtra(“name”,”Tran Minh Hai”); -------------------------------------------------------------------------------------------- Intent intent = getIntent(); String hoTen = intent.getStringExtra(“name”); // hoTen = “Tran Minh Hai”

Ta có thể sử dụng đối tượng Bundle. Đóng gói tất cả dữ liệu vào trong Bundle xong truyền Bundle cho Intent
ví dụ:

Intent mIntent = new Intent(MainActivity.this, Main2Activity.class); Bundle mBundle = new Bundle(); mBundle.putString(key, value); mIntent.putExtras(mBundle); ---------------------------------------------------------------------- String value = getIntent().getExtras().getString(key);

4.2. Sử dụng intent chia sẻ

Có rất nhiều ứng dụng android cho phép bạn chia sẻ dữ liệu với những người khác, ví dụ: facebook, G+, Gmail... Bạn có thể gửi dữ liệu tới một vài thành phần nào đó. ví dụ dưới đây sẽ mô tả việc sử dụng intent như vậy

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

4.3. Lấy lại kết quả dữ liệu từ sub-activity

Một activity có thể được đóng lại thông qua button back trên điện thoại. Trong trường hợp đó, hàm finish() sẽ được thực thi. Nếu activity đã được khởi chạy cùng với hàm startActivity(intent), người gọi không cần thiết phải có kết quả hoặc phản hồi từ activity mà có thể close ngay lập tức.

Nếu bạn start một activity cùng với hàm startActivityForResult(), như vậy là bạn mong muốn có phản hồi từ sub-activity. Khi một sub-activity kết thúc, hàm onActivityResult() trên sub-activity sẽ được gọi và bạn có thể thực hiện hành động dựa trên kết quả.

Trong hàm startActivityForResult(), bạn có thể xác định hành động bạn sẽ khởi chạy. Hành động này bạn sẽ mong muốn nhận về kết quả. Một hành động đã được khởi chạy cũng có thể thiết lập một đoạn mã code mà người gọi có thể sử dụng để xác định hành động sẽ được cancel hoặc not

sub-activity sử dụng hàm finish() để khởi tạo một intent mới và truyền dữ liệu cho nó. Nó cũng thiết lập kết quả thông qua hàm setResult

Ví dụ:

public void onClick(View view) { Intent i = new Intent(this,ActivityTow.class); i.putExtra("value1","This value one for activityTow"); i.putExtra("Value2", "This value two ActivityTwo"); // set the request code to any code you like, // you can identify the callback via this code startActivityForResult(i, REQUEST_CODE); }

Nếu bạn sử dụng hàm startActivityForResult(), thì sau khi start activity sẽ gọi đến sub-activity

Nếu hàm sub-activity kết thúc, nó sẽ gửi dữ liệu đến cái đã gọi nó thông qua intent. điều này được xử lý trên hàm finish()

@Override public void finish() { // Prepare data intent Intent data = new Intent(); data.putExtra("returnKey1", "Swinging on a star. "); data.putExtra("returnKey2", "You could be better then you are. "); // Activity finished ok, return the data setResult(RESULT_OK, data); super.finish(); }

Một sub-activity kết thúc, hàm onActivityResult() trong activity cha sẽ được gọi

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("returnKey1")) { Toast.makeText(this, data.getExtras().getString("returnKey1"), Toast.LENGTH_SHORT).show(); } } }

Tham khảo: http://www.vogella.com/tutorials/AndroidIntent/article.html

Cùng một tác giả

Cách sử dụng intent trong android

13 0

Giả sử ta có thư mục cdemo trong thư mục cdemo, ta có 3 file main.c, sum.c, sum.h với nội dung lần lượt như sau main.c include "sum.h" int ma...

Cách sử dụng intent trong android

8 5

Đặt vấn đề mình đang phải đọc một quyển ebook tiếng anh, khổ nỗi tiếng anh thì có hạn. Vì vậy mình thường xuyên phải alt+tab giữa ebook vs google ...

Cách sử dụng intent trong android

6 0

Lập trình C trên linux Mục tiêu bài viết giải thích quá trình build code trong lập trình C trên linux, mối quan hệ giữa compiler và linker... với...