Giới Thiệu Intent Trong Android Là Gì, Tìm Hiểu Về Intent Trong Android vuidulich.vn

Or you want a quick look: #1. Intent là gì? Vai trò của Intent trong Android như thế nào?

Khi các bạn cần phải kết nối các thành phần ứng dụng Android thì đều phải sử dụng Intent. Vậy Intent là gì? Vai trò và cách sử dụng như thế nào trong ứng dụng Android.

Bạn đang xem: Intent trong android là gì

Bài viết này mình hướng dẫn các bạn tìm hiểu bản chất cũng như cách sử dụng Intent trong android để có thể gửi dữ liệu giữa các thành phần( Activity, Service…)

Trước đó bạn có thể nên đọc thêm bài viết về vòng đời activityservice trong Android mà mình đã viết nhé.

Trước khi vào bài viết mình chợt nghĩ đến ví dụ: Con người làm bất kể việc gì đều có mục đích cả. Từ xem TV, mua sắm, lập trình ứng dụng … đều có một số mục đích đằng sau nó.

Android hoạt động theo cách tương tự. Trước khi một ứng dụng có thể thực hiện một hành động nào đó(Thuật ngữ gọi là action), nó cần phải biết trước mục đích của các hành động đó, để có thể thực hiện các action đó đúng cách.

Hóa ra, con người và Android cũng không khác biệt chút nào, đúng không ^_^Sau bài viết này, chúng ta sẽ biết được:

Intent là gì và vai trò của Intent trong Android như thế nào?Có bao nhiêu loại intent?Sử dụng Intent để gửi dữ liệu giữa các ActivitySử dụng Parcelable và Serializable để Intent có thể truyền được dữ liệu là các đối tượng(Object)
READ  Giao Thức Radius Là Gì vuidulich.vn

Chúng ta bắt đầu nhé!

*

Nội dung chính của bài viết

#2. Phân loại Intent#4. Truyền dữ liệu giữa các Activity bằng Intent#5. Truyền dữ liệu là đối tượng bằng intent sử dụng Parcelable và Serializable Data

#1. Intent là gì? Vai trò của Intent trong Android như thế nào?

Intent là một khái niệm khá trừu tượng về công việc, chức năng có thể được thực hiện bởi ứng dụng của bạn. Intent có thể được dùng để kết nối các thành phần trong ứng dụng Android. Trong quá trình kết nối, nó cũng có thể yêu cầu thành phần đó thực hiện một tác vụ được định trước. Các thành phần cơ bản của một Intent:

Actions: Là những thứ mà Intent cần thực thi, chẳng hạn như quay số điện thoại, mở URL hoặc chỉnh sửa dữ liệu. Một action đơn giản là một String mô tả cho tác vụ cần thực hiện. Ví dụ: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN…Data: Đây chính là dữ liệu để intent hoạt động. Nó được biểu diễn dưới dạng Uniform Resource Identifier(Uri) – một kiểu định danh cho một tài nguyên cụ thể. Kiểu của Data yêu cầu (nếu có) tùy thuộc vào action. Ví dụ: Bạn sẽ không muốn tạo một dial number Intent mà lại lấy số điện thoại từ một hình ảnh đúng không?

Khả năng kết hợp các action và data này cho phép Android biết chính xác intent đang yêu cầu gì và những đối tượng nào có thể thực hiện nó. Đơn giản như vậy!

Intents có thể được sử dụng để:

Mở một Activity mới và truyền dữ liệu cho Activity đóMở một Fragments / Giao tiếp giữa các Fragments.Mở hoặc dừng một Service

♥ Có thể bạn cần đến cách thêm Fragment vào Activity

#2. Phân loại Intent

Có hai loại Intents

Explicit Intent – Intent dạng tường minh

Intent tường mình tức là khi tạo một đối tượng Intent, chúng ta chỉ định rõ và truyền trực tiếp tên thành phần đích vào intent. Ví dụ: như đoạn code bên dưới, intent được chỉ định rõ OtherActivity sẽ là thành phần nhận và xử lý intent này.

READ  Ribosome liên kết là gì? Đặc trưng, Cấu tạo và Chức năng của Ribosome

val intent = Intent(this, OtherActivity::class.java)startActivity(intent)

*

Implicit Intent – Intent không tường minh

Thay vì trong intent Android được chỉ định sẵn một Activity nào đó thực hiện, thì sẽ chỉ truyền vào action và gửi cho Android. Android sẽ dựa vào action đó mà lọc những thành phần nào đã đăng kí action đó gọi ra.

Vì vậy, Android có thể tự động kích hoạt thành phần từ cùng một ứng dụng hoặc một số ứng dụng khác để xử lý intent đó.

Ví dụ, chúng ta cần phải hiển thị một vị trí lên bản đồ. Thay vì chúng ta phải mã hóa và viết hẳn module bản đồ để hiển thị thì có thể gửi vị trí đó vào intent, rồi Android sẽ tự tìm xem có ứng dụng nào phù hợp( như Google Map chẳng hạn) để hiển thị nó.

*

Thông thường, chúng ta dùng các intent tường minh để kích hoạt các thành phần trong ứng dụng, còn intent không tường minh để chạy các thành phần của ứng dụng bên thứ 3.

Xem thêm: Đơn Vị Thi Công Tiếng Anh Là Gì ? Đơn Vị Thi Công Tiếng Anh Là Gì

Đây là một đoạn code minh họa cho intent không tường minh( sử dụng ACTION_VIEWđể gọi ứng dụng nào có thể hiển thị được link)

class ImplicitIntentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_implicit_intent) } fun showWebPage(view: View) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.ebookfrenzy.com")) startActivity(intent) }}Kết quả sẽ như bên dưới

*

#3. Intent Flags

Flags giống như các tùy chọn(option) cho intent trong android. Bạn có thể sử dụng các flags này để cấu hình intent, các flags này giúp Android “hành xử” với intent đúng ý đồ của lập trình viên.

Ví dụ: Mặc định khi sử dụng intent để gọi Activity thì activity đó sẽ được đưa vào stack. Và khi người dùng nhấn nút back trên điện thoại thì Android sẽ gọi các activity được lưu trong stack lên.

Để ngăn chặn điêu này, bạn có thể dùng flag:FLAG_ACTIVITY_SINGLE_TOP. Nếu đặt flag này, thì intent sẽ không thể gọi activity nếu activity đó đang ở top của stack

READ  Cắt tóc ngày nào tốt? Những điều cần kiêng khi cắt tóc

intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOPTương tự , sử dụng flag: FLAT_ACTIVITY_CLEAR_TOPsẽ xóa tất cả các activity khác trong stack và đặt activity đc gọi lên top của stack.

Có rất nhiều flag hữu ích cho ứng dụng, các bạn có thể tham khảo thêm ở đây

#4. Truyền dữ liệu giữa các Activity bằng Intent

Để truyền dữ liệu sang cho activity mới chúng ta sử dụng các cặp key-value trong hàm putExtra, putStringArrayListExtra.

putExtra chỉ truyền được dữ liệu kiểu cơ bản: Int, Float, Char, Double, Boolean, String

*

Ví dụ:

val intent = Intent(this, OtherActivity::class.java)intent.putExtra("keyString", "Androidly String data")Sau đó các giá trị trong Extras được đóng gói vào Bundle trước khi nó được gửi đi.

Truy xuất dữ liệu trong một Activity mới

val bundle: Bundle? = intent.extrasval string: String? = intent.getString("keyString")val myArray: ArrayList? = intent.getStringArrayList("myArray")Intent, extras tương ứng với getIntent(), getExtras()nếu viết bằng Java.Chúng ta vừa dùng toán tử nullable Bundle? để phòng trường hợp bị NullPointerExceptions khi không có dữ liệu.

Tương tự, khi lấy giá trị thông qua các Key, chúng ta dùng kiểu nullable để phòng ngừa NPE có thể xảy ra khi key không chính xác

#5. Truyền dữ liệu là đối tượng bằng intent sử dụng Parcelable và Serializable Data

Như mình đã nói ở trên thì với các truyền dữ liệu thông thường qua hàm putExtra(), sẽ chỉ truyền được các loại dữ liệu cơ bản, không thể truyền được dữ liệu kiểu object.

Để khắc phục điều này, chúng ta implement interface Parcelable hoặc Serializable.

Điểm khác nhau giữ Parcelable và Serializable

Parcelable Interface là một phần của Android SDK. Còn Serializable là một interface tiêu chuẩn của Java.Trong Parcelable bạn cần đặt tất cả dữ liệu mà bạn cần truyền vào đối tượng Parcel và override lại phương thức writeToParcel(). Trong serializable chỉ cần implement interface là đủ để truyền dữ liệu.Parcelable được đánh giá là nhanh hơn Serializable.

Cách sử dụng Parcelable

Kotlin đưa ra một số annotations rất tiện để lưu chúng từ việc override phương thức writeToParcel()để đưa dữ liệu vào Parcelable. Thay vào đó, chúng ta có thể dùng annotations 

See more articles in the category: wiki

Leave a Reply