web-dev-qa-db-fra.com

Intention explicite d'Android avec le composant cible

Est-il possible de déclencher une intention explicite, mais pas pour une activité de mon projet, mais pour une activité dans une autre application?.

Je suis sûr de ce code et je sais qu'il fonctionne

Intent i=new Intent(this,MyActivity.class);

Mais est-il possible de faire quelque chose comme ça

Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);

Je veux dire quelle est la manière exacte de lancer explicitement l’activité à partir d’une autre application (activité contenue dans un autre apk), est-ce possible?

J'ai essayé mais ça me laisse tomber forse près message ... :(

16
Lukap

Oui c'est possible. Mais la création de l'intention est différente.Essayez ceci:

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivityForResult(intent);
34
SRam

Oui c'est possible. Mais la création de l'intention est un peu différente.

Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivity(intent);

Mais vous ne pouvez appeler aucune activité d'une application aléatoire. Cette activité particulière devrait avoir un filtre d'intention avec une action PRINCIPALE.

6
Kumar Bibek

Vous pouvez démarrer n'importe quel composant par le biais de l'intention. Il suffit de connaître l'action ou le nom du composant cible (pkg, cls).
Considérez que j'ai développé deux applications app1 & app2 app1 pkg nom est com.xyz.app1 & app2 pkg nom est com.xyz.app2.

app1 ayant deux activités App1MainActivity & App1XyzActivity, app2 a une seule activité App2MainActivity maintenant je veux démarrer à la fois l'activité de app1 de app2 App2MainActivity
app2 App2MainActivity a deux boutons b1 et b2 sur clic b1 Je veux démarrer App1MainActivity & sur clic b2 Je veux démarrer App1XyzActivity puis le code des boutons b1 et b2 dans App2MainActivity est

b1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1MainActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

b2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        Intent i = new Intent();
        String pkg = "com.xyz.app1";
        String cls = "com.xyz.app1.App1XyzActivity";
        i.setComponent(new ComponentName(pkg, cls));
        App2MainActivity.this.startActivity(i);

    }
});

maintenant, j'installe les deux applications app1 et app2 et lance l'application app2.
Lorsque je clique sur le bouton b1, app1 devient App1MainActivity, mais si je clique sur le bouton b2, une exception se produit, car nous ne pouvons démarrer aucune activité d’une autre application, même si vous connaissez le nom du package et sa classe. nom, mais vous pouvez démarrer une autre activité principale de l'application si elle possède un filtre d'intention avec l'action MAIN et si vous connaissez son nom de package et le nom de la classe.

3
S.H.KHAN

Oui c'est possible, vous pouvez appeler une autre activité d'un autre package comme celui-ci.

Voir détails ici

1
Rasel

Je suggérerais de concaténer le paquet et le nom de la classe avec un point;

cela accélère le copier-coller, par ex. en écrivant des tests jUnit.

String packageName = getApplicationContext().getPackageName();
String className = "SomeActivity";

Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);
0
Martin Zeitler
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("np.birthday.com.order", "np.birthday.com.order.MainActivity");// intent.setClassName("Package NAme of another application", "np.birthday.com.order.MainActivity");
startActivity(intent);
0
jeevan thapa