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 ... :(
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);
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.
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.
Oui c'est possible, vous pouvez appeler une autre activité d'un autre package comme celui-ci.
Voir détails ici
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);
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);