web-dev-qa-db-fra.com

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

J'ai l'application A définie comme ci-dessous:

<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!

75
user256239

Si vous êtes confrontés à l'erreur "Refus de permission: démarrage de l'intention ..." ou si l'application échoue sans raison lors du lancement de l'application, utilisez ensuite ce code à ligne unique dans Manifest

Android:exported="true"

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

finish();

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

J'ai cherché sur le Web et trouvé quelque chose comme ça ci-dessous, et cela fonctionne 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();
}
139
user256239

Si les deux applications ont la même signature (ce qui signifie que les deux applications sont à vous et sont 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 ça aide.

16
azelez