Giới thiệu
Android cho phép một ứng dụng khởi chạy (launch) ứng dụng khác thông qua Intent tường minh (explicit) hoặc ngầm định (implicit). Ví dụ này mở YouTube bằng package name.
Các phương pháp
Phương pháp 1: Package Name (Explicit Intent) - Khuyên dùng
Biết trước package name của app đích (VD: com.google.android.youtube).
// Trong Activity/Fragment
Button btnLaunch = findViewById(R.id.btnLaunch);
btnLaunch.setOnClickListener(v -> {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.youtube");
if (intent != null) {
try {
startActivity(intent);
} catch (Exception e) {
// Xử lý lỗi
}
} else {
// App chưa cài đặt → mở Play Store
openPlayStore("com.google.android.youtube");
}
});
private void openPlayStore(String packageName) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + packageName));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
Phương pháp 2: Implicit Intent (Action + Category)
Không cần biết package name, hệ thống chọn app phù hợp.
// Mở trình duyệt web
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.youtube.com"));
startActivity(intent);
// Chia sẻ văn bản
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, "Xem video này!");
startActivity(Intent.createChooser(share, "Chia sẻ qua"));
// Gửi email
Intent email = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "abc@example.com", null));
email.putExtra(Intent.EXTRA_SUBJECT, "Chủ đề");
startActivity(email);
Phương pháp 3: Kiểm tra app có cài đặt không
public boolean isAppInstalled(String packageName) {
try {
getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Ví dụ hoàn chỉnh (Mở YouTube)
Layout (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/btnOpenYouTube"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mở YouTube" />
<Button
android:id="@+id/btnOpenBrowser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Mở YouTube trên trình duyệt" />
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnYouTube = findViewById(R.id.btnOpenYouTube);
Button btnBrowser = findViewById(R.id.btnOpenBrowser);
btnYouTube.setOnClickListener(v -> openAppByPackage("com.google.android.youtube"));
btnBrowser.setOnClickListener(v -> openUrl("https://www.youtube.com"));
}
private void openAppByPackage(String packageName) {
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
openPlayStore(packageName);
}
} else {
openPlayStore(packageName);
}
}
private void openUrl(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "Không có trình duyệt", Toast.LENGTH_SHORT).show();
}
}
private void openPlayStore(String packageName) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
}
Chạy ứng dụng
Nhấn Run. Màn hình có 2 nút: "Mở YouTube" (mở app YouTube nếu có, không thì Play Store) và "Mở trên trình duyệt".

Lưu ý bảo mật & Best Practices
- Luôn dùng
intent.resolveActivity()hoặc try-catchActivityNotFoundException. - Android 11+ (API 30): Cần khai báo
<queries>trong Manifest để thấy package khác:
<queries>
<package android:name="com.google.android.youtube" />
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
</queries>
- Không lạm dụng launch app khác - trải nghiệm người dùng có thể bị gián đoạn.
- Dùng
FLAG_ACTIVITY_NEW_TASKkhi launch từ Service/BroadcastReceiver.