Hai loại Intent chính
Android có **2 loại Intent**: Explicit Intent (Tường minh) và Implicit Intent (Ngầm định).

1. Explicit Intent (Tường minh)
Chỉ định **chính xác component đích** (tên class). Dùng cho giao tiếp nội bộ app.
// Khởi động Activity khác Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent);
Phải khai báo Activity đích trong AndroidManifest.xml:
<activity android:name=".SecondActivity" />
Nếu không khai báo → ActivityNotFoundException tại runtime.
2. Implicit Intent (Ngầm định)
Không chỉ định class đích, mà khai báo **action** (hành động) và **data** (dữ liệu). Hệ thống tìm app phù hợp để xử lý.
Các phương thức thiết lập
setAction(String action): Hành động (VIEW, SEND, DIAL, EDIT...).setData(Uri uri): Dữ liệu (URL, số điện thoại, đường dẫn file...).setType(String mimeType): Loại MIME (text/plain, image/jpeg...).setDataAndType(Uri, String): Cả data và type.
Ví dụ: Mở trang web
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.tutorialspoint.com"));
startActivity(intent);
Ví dụ: Gọi điện
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent);
Ví dụ: Chia sẻ văn bản
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Nội dung chia sẻ");
startActivity(Intent.createChooser(intent, "Chia sẻ qua"));
Ví dụ hoàn chỉnh: Implicit Intent mở website
Layout: Button "Mở website"
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mở website" />
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.send);
btn.setOnClickListener(v -> {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.tutorialspoint.com"));
startActivity(intent);
});
}
}
Manifest: Permission Internet
<uses-permission android:name="android.permission.INTERNET" />
Kết quả
Bấm button → Mở trình duyệt TutorialsPoint:

So sánh tóm tắt
| Đặc điểm | Explicit Intent | Implicit Intent |
|---|---|---|
| Mục đích | Giao tiếp nội bộ app | Giao tiếp với app khác/hệ thống |
| Chỉ định đích | Tên class (ComponentName) | Action + Data/Type |
| Manifest | Bắt buộc khai báo component | Không cần (hệ thống resolve) |
| An toàn | Chắc chắn component tồn tại | Có thể không có app xử lý → crash nếu không check |
Best Practice
- Luôn dùng
intent.resolveActivity(packageManager) != nulltrướcstartActivitycho Implicit Intent. - Dùng
Intent.createChoosercho ACTION_SEND để người dùng chọn app. - Khai báo
intent-filtertrong Manifest nếu muốn app của bạn xử lý Implicit Intent.