Lancer une application depuis une autre application sur Android

Je souhaite lancer un package installé à partir de mon application Android. Je suppose que c’est possible en utilisant des intentions, mais je n’ai pas trouvé le moyen de le faire. Y a-t-il un lien, où trouver l’information?

Si vous ne connaissez pas l’activité principale, le nom du package peut être utilisé pour lancer l’application.

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); if (launchIntent != null) { startActivity(launchIntent);//null pointer check in case package name was not found } 

Je sais que cela a été répondu, mais voici comment j’ai mis en œuvre quelque chose de similaire:

 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); } 

Encore mieux, voici la méthode:

 public void startNewActivity(Context context, Ssortingng 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); } } 

Suppression du code en double:

 public void startNewActivity(Context context, Ssortingng 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); } 

J’ai trouvé la solution. Dans le fichier manifeste de l’application, j’ai trouvé le nom du package: com.package.address et le nom de l’activité principale que je veux lancer: MainActivity Le code suivant démarre cette application:

 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity")); startActivity(intent); 

Voici mon exemple de lancement d’un scanner de code barre / QR depuis mon application si quelqu’un le trouve utile

 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(ssortingngTitle); downloadDialog.setMessage(ssortingngMessage); 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(); } 
 // in onCreate method Ssortingng appName = "Gmail"; Ssortingng packageName = "com.google.android.gm"; openApp(context, appName, packageName); public static void openApp(Context context, Ssortingng appName, Ssortingng 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, Ssortingng 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, Ssortingng 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; } 
 // 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 Ssortingng 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, Ssortingng 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); } } 

Si vous voulez ouvrir une activité spécifique d’une autre application, nous pouvons l’utiliser.

 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() } 

Si vous avez besoin d’une autre application, au lieu d’afficher Toast, vous pouvez afficher une boîte de dialog. En utilisant la boîte de dialog, vous pouvez amener l’utilisateur à Play-Store pour télécharger l’application requirejse.

Si vous connaissez les données et l’action sur lesquelles le package installé réagit, vous devez simplement append ces informations à votre instance intentionnelle avant de la démarrer.

Si vous avez access au manifeste Android de l’autre application, vous pouvez y voir toutes les informations nécessaires.

Étapes pour lancer une nouvelle activité comme suit:

1.Obtenir l’intention de paquet

2. Si l’intention est null, redirigez l’utilisateur vers le Playstore

3.Si l’intention n’est pas null activité ouverte

 public void launchNewActivity(Context context, Ssortingng 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); } }