Saya ingin meluncurkan paket yang diinstal dari aplikasi Android saya. Saya berasumsi bahwa itu mungkin menggunakan niat, tetapi saya tidak menemukan cara untuk melakukannya. Apakah ada tautan, di mana menemukan informasi itu?
Saya ingin meluncurkan paket yang diinstal dari aplikasi Android saya. Saya berasumsi bahwa itu mungkin menggunakan niat, tetapi saya tidak menemukan cara untuk melakukannya. Apakah ada tautan, di mana menemukan informasi itu?
Jawaban:
Jika Anda tidak tahu aktivitas utama, maka nama paket dapat digunakan untuk meluncurkan aplikasi.
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
if (launchIntent != null) {
startActivity(launchIntent);//null pointer check in case package name was not found
}
CATEGORY_INFO
, dan berikutnya untuk aktivitas utama dalam kategori CATEGORY_LAUNCHER
. Mengembalikan nol jika tidak ada yang ditemukan. "
Saya tahu ini telah dijawab tetapi di sini adalah bagaimana saya menerapkan sesuatu yang serupa:
Intent intent = getPackageManager().getLaunchIntentForPackage("com.package.name");
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + "com.package.name"));
startActivity(intent);
}
Lebih baik lagi, inilah caranya:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent != null) {
// We found the activity now start the activity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
}
}
Kode duplikat dihapus:
public void startNewActivity(Context context, String packageName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (intent == null) {
// Bring user to the market or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + packageName));
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
Saya menemukan solusinya. Dalam file manifes aplikasi saya menemukan nama paket: com.package.address dan nama aktivitas utama yang ingin saya luncurkan: MainActivity Kode berikut memulai aplikasi ini:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity"));
startActivity(intent);
// in onCreate method
String appName = "Gmail";
String packageName = "com.google.android.gm";
openApp(context, appName, packageName);
public static void openApp(Context context, String appName, String packageName) {
if (isAppInstalled(context, packageName))
if (isAppEnabled(context, packageName))
context.startActivity(context.getPackageManager().getLaunchIntentForPackage(packageName));
else Toast.makeText(context, appName + " app is not enabled.", Toast.LENGTH_SHORT).show();
else Toast.makeText(context, appName + " app is not installed.", Toast.LENGTH_SHORT).show();
}
private static boolean isAppInstalled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException ignored) {
}
return false;
}
private static boolean isAppEnabled(Context context, String packageName) {
boolean appStatus = false;
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packageName, 0);
if (ai != null) {
appStatus = ai.enabled;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return appStatus;
}
Berikut adalah contoh saya meluncurkan pemindai kode batang / QR dari aplikasi saya jika seseorang menganggapnya berguna
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
try
{
startActivityForResult(intent, SCAN_REQUEST_CODE);
}
catch (ActivityNotFoundException e)
{
//implement prompt dialog asking user to download the package
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(this);
downloadDialog.setTitle(stringTitle);
downloadDialog.setMessage(stringMessage);
downloadDialog.setPositiveButton("yes",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialogInterface, int i)
{
Uri uri = Uri.parse("market://search?q=pname:com.google.zxing.client.android");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try
{
myActivity.this.startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Dialogs.this.showAlert("ERROR", "Google Play Market not found!");
}
}
});
downloadDialog.setNegativeButton("no",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int i)
{
dialog.dismiss();
}
});
downloadDialog.show();
}
Edit tergantung pada komentar
Dalam beberapa versi - seperti yang disarankan dalam komentar - pengecualian yang diberikan mungkin berbeda.
Dengan demikian solusi di bawah ini sedikit dimodifikasi
Intent launchIntent = null;
try{
launchIntent = getPackageManager().getLaunchIntentForPackage("applicationId");
} catch (Exception ignored) {}
if(launchIntent == null){
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
} else {
startActivity(launchIntent);
}
Jawaban Asli
Meskipun dijawab dengan baik, ada implementasi yang cukup sederhana yang menangani jika aplikasi tidak diinstal. Saya melakukannya seperti ini
try{
startActivity(getPackageManager().getLaunchIntentForPackage("applicationId"));
} catch (PackageManager.NameNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://play.google.com/store/apps/details?id=" + "applicationId")));
}
Ganti "applicationId" dengan paket yang ingin Anda buka seperti com.google.maps, dll.
PackageManager.getLaunchIntentForPackage(...)
kembali metode nol jika nama paket tidak diakui. Itu tidak melempar PackageManager.NameNotFoundException
. Lihat di sini .
startActivity(null)
emulator Android 10 dan melempar NullPointerException
dan bukan PackageManager.NameNotFoundException
.
startActivity(Intent intent)
metode ketika diberikan nol Intent
dan apa yang membuat Anda mengatakan itu? Dokumentasi pengembang Android hanya menyatakan bahwa ia akan melempar ActivityNotFoundException
.
// check for the app if it exist in the phone it will lunch it otherwise, it will search for the app in google play app in the phone and to avoid any crash, if no google play app installed in the phone, it will search for the app in the google play store using the browser :
public void onLunchAnotherApp() {
final String appPackageName = getApplicationContext().getPackageName();
Intent intent = getPackageManager().getLaunchIntentForPackage(appPackageName);
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
onGoToAnotherInAppStore(intent, appPackageName);
}
}
public void onGoToAnotherInAppStore(Intent intent, String appPackageName) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + appPackageName));
startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
startActivity(intent);
}
}
Jika Anda ingin membuka aktivitas spesifik aplikasi lain, kami dapat menggunakannya.
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try
{
startActivity(intent)
}catch(ActivityNotFoundException e){
Toast.makeText(context,"Activity Not Found",Toast.LENGTH_SHORT).show()
}
Jika Anda harus membutuhkan aplikasi lain, alih-alih menunjukkan Toast Anda dapat menampilkan dialog. Menggunakan dialog Anda dapat membawa pengguna ke Play-Store untuk mengunduh aplikasi yang diperlukan.
com.android.settings.fuelgauge.PowerUsageSummary
hanyalah aktivitas-alias dari com.android.settings.Settings$PowerUsageSummaryActivity
, dan telah dihapus di Android Pie , jadi saya menyimpulkan hasil edit untuk membuat jawaban ini cocok untuk Pie. Perhatikan bahwa ini juga kompatibel dengan versi yang lebih lama, lihat komit AOSP pada 10 November 2011 af9252849fd94c1f2859c56a4010900ea38a607e dll
Jika Anda mengetahui data dan tindakan paket yang diinstal bereaksi, Anda harus menambahkan informasi ini ke instance niat Anda sebelum memulainya.
Jika Anda memiliki akses ke AndroidManifest dari aplikasi lain, Anda dapat melihat semua informasi yang diperlukan di sana.
Langkah-langkah untuk memulai aktivitas baru sebagai berikut:
1. Dapatkan niat untuk paket
2.Jika niat adalah pengalihan nol pengguna ke playstore
3.Jika niat bukan aktivitas terbuka nol
public void launchNewActivity(Context context, String packageName) {
Intent intent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.CUPCAKE) {
intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
}
if (intent == null) {
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
}
} else {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
Dimungkinkan untuk memulai aktivitas aplikasi dengan menggunakan Intent.setClassName
sesuai dengan dokumen.
Sebuah contoh:
val activityName = "com.google.android.apps.muzei.MuzeiActivity" // target activity name
val packageName = "net.nurik.roman.muzei" // target package's name
val intent = Intent().setClassName(packageName, activityName)
startActivity(intent)
Untuk membukanya di luar aplikasi saat ini, tambahkan bendera ini sebelum memulai niat.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
Jawaban terkait di sini
private fun openOtherApp() {
val sendIntent = packageManager.getLaunchIntentForPackage("org.mab.dhyanaqrscanner")
startActivity(sendIntent)
finishAffinity()
}