87 votes

Comment démarrer une activité dans une autre application ?

J'ai une application A définie comme suit :

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name="com.example.MyExampleActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Maintenant, dans l'application B, comment puis-je écrire le code pour démarrer l'activité dans l'application A ? Merci !

173voto

user256239 Points 3579

Si vous êtes confronté à l'erreur "Permission Denial : starting Intent..." ou si l'application se bloque sans raison lors du lancement de l'application, utilisez ce code d'une seule ligne dans Manifest

android:exported="true"

S'il vous plaît soyez prudent avec finish() ; , si vous l'avez manqué l'application se fige. si son mentionné l'application serait un lanceur lisse.

finish();

L'autre solution ne fonctionne que pour deux activités qui se trouvent dans la même application. Dans mon cas, l'application B ne connaît pas la classe com.example.MyExampleActivity.class dans le code, donc la compilation échouera.

J'ai cherché sur le web et j'ai trouvé quelque chose comme ceci ci-dessous, et ça marche bien.

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example", "com.example.MyExampleActivity"));
startActivity(intent);

Vous pouvez également utiliser la méthode setClassName :

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.hotfoot.rapid.adani.wheeler.android", "com.hotfoot.rapid.adani.wheeler.android.view.activities.MainActivity");
startActivity(intent);
finish();

Vous pouvez également transmettre les valeurs d'une application à une autre :

Intent launchIntent = getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.hotfoot.rapid.adani.wheeler.android.LoginActivity");
if (launchIntent != null) {
    launchIntent.putExtra("AppID", "MY-CHILD-APP1");
    launchIntent.putExtra("UserID", "MY-APP");
    launchIntent.putExtra("Password", "MY-PASSWORD");
    startActivity(launchIntent);
    finish();
} else {
    Toast.makeText(getApplicationContext(), " launch Intent not available", Toast.LENGTH_SHORT).show();
}

1 votes

Heureux de voir cette réponse ! Cependant, dans mon cas (Android 4.2), j'ai obtenu l'erreur "Permission Denial : starting Intent ...". Un indice ?

12 votes

@JackWM ajoute Android:exported="true" à la propriété de votre activité

3 votes

@JackWM cela fonctionnera également si l'activité que vous essayez de lancer possède un filtre d'intention. En effet, la valeur par défaut de l'élément android:exported L'attribut XML est true lorsqu'un filtre d'intention est présent.

16voto

azelez Points 1081

Si les deux applications ont la même signature (c'est-à-dire que les deux APPS sont les vôtres et ont été signées avec la même clé), vous pouvez appeler l'activité de votre autre application comme suit :

Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(CALC_PACKAGE_NAME);
startActivity(LaunchIntent);

J'espère que cela vous aidera.

9 votes

Il n'est pas nécessaire que les deux applications aient la même signature. Vous pouvez par exemple lancer Google Maps avec ceci : Intent i = getPackageManager().getLaunchIntentForPackage("com.google.android.apps.maps") ;

1 votes

@TimAutin Et si j'ai besoin de lancer une activité spécifique qui appartient à une application dont je n'ai pas le contrôle ?

1 votes

Je n'ai jamais eu à le faire, donc je ne sais pas. Avez-vous essayé cette réponse stackoverflow.com/a/2210073/1356106 ?

2voto

Amit Jain Points 41

Permettre à d'autres applications de lancer votre activité - http://developer.Android.com/training/basics/intents/filters.html

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:

X