Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Có bao nhiêu loại Intent trong Android?

Hai loại Intent chính

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

Có bao nhiêu loại Intent trong Android?

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:

Có bao nhiêu loại Intent trong Android? Có bao nhiêu loại Intent trong Android?

So sánh tóm tắt

Đặc điểmExplicit IntentImplicit Intent
Mục đíchGiao tiếp nội bộ appGiao tiếp với app khác/hệ thống
Chỉ định đíchTên class (ComponentName)Action + Data/Type
ManifestBắt buộc khai báo componentKhông cần (hệ thống resolve)
An toànChắc chắn component tồn tạiCó thể không có app xử lý → crash nếu không check

Best Practice

  • Luôn dùng intent.resolveActivity(packageManager) != null trước startActivity cho Implicit Intent.
  • Dùng Intent.createChooser cho ACTION_SEND để người dùng chọn app.
  • Khai báo intent-filter trong Manifest nếu muốn app của bạn xử lý Implicit Intent.