405 votes

Lancer une application à partir d'une autre application sur Android

Je veux lancer un paquet installé à partir de mon application Android. Je suppose qu'il est possible à l'aide d'intentions, mais je n'ai pas trouver un moyen de le faire. Il existe un lien, où trouver l'information?

632voto

andep Points 2801

Si vous ne connaissez pas l'activité principale, le nom de package peut être utilisé pour démarrer l'application.

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(LaunchIntent);

197voto

Jared Burrows Points 3932

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

Intent intent = getPackageManager().getLaunchIntentForPackage("com.package.address");
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.address"));
    startActivity(intent);
}

Encore mieux, voici la méthode:

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);
        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));
        startActivity(intent);
    }
}

Laissez-moi savoir si cela aide!

135voto

Bastian Points 1481

J'ai trouvé la solution. Dans le fichier manifeste de l'application, j'ai trouvé le nom du package: com.package.l'adresse 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);

13voto

smoke4fun Points 111

Voici mon exemple de lancement de la barre/QR code scanner à partir de 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(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();
}

2voto

WarrenFaith Points 28137

Si vous connaissez les données et les actions que le paquet installé réagir, tout simplement, vous devez ajouter ces informations à votre intention instance avant le départ.

Si vous avez accès à la AndroidManifest de l'autre application, vous pouvez voir toutes les informations nécessaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: